集合框架
一,概念
1,基本
1,为了实现某一种特定功能而预先设计好的一系列具有继承或实现关系的类与接口,
2,操作时可以直接从高层直接开发而不用考虑底层
3,Java集合框架简称 jcf Java Collection Framework
2,最主要的collection
1,iterator和map与collection是关系型
2,List和set都是继承collection
3,collection 是接口
4,collections 是工具类,用来操作collection
二,List---中文名叫;列表(继承collection接口)
1,特点;
1,线性--以有序的方式存放数据,(放入元素的位置,数组就是线性)有序存放,有下标
2,掌握:ArrayList、LinkedList
1、在用法上两者的API完全相同;
2、调用以后的效果也是一样的。
3,区别:两个类在底层的实现上,ArrayList采用的是数组的方式进行存储;
1,LinkedList采用的是双向链表的方式。
这种区别造成了两个类适用场景的不同:
LinkedList适用于做大量的往中间添加和删除数据。
2,ArrayList适用于做大量查询动作或往尾部添加和删除数据;
3,辨析:ArrayList\LinkedList\Vector
Vector也是List分支,是ArrayList的兄弟类,底层实现也是数组,
不同于ArrayList的是它是线程安全的,效率低。
2,增;
lst.add("String");
lst.add(new Date());
lst.add(new StudentBean("小白", 25, 70));
lst.add(250);//注意:这是自动封箱,放进去的是一个Integer对象。
System.out.println(lst.size());//得到集合中元素个数
3,删
lst.remove(0);//根据下标进行删除
lst.remove("String");//根据对象进行删除
4,改
lst.set(1, "SSSS");//根据下标完成修改
5,查
System.out.println(lst.get(0));//get方法默认返回的是Odject
6,遍历---掌握1和2,认识3
1、普通for循环
for(int i = 0; i < lst.size(); i++){
System.out.println(lst.get(i));
}
2、for-each 循环---JDK1.5以后才有的功能
for(Object obj : lst){
System.out.println(obj);
}
3,迭代器---Iterator---以前主要用于没有下标的集合类完成遍历,现在被for-each替代
数组不能用---只有集合能用
Iterator it = lst.iterator();
产生和集合对象相关联的迭代器对象
while(it.hasNext()){
Object obj = it.next();
System.out.println(obj);
}
二,Set---集,不能存放重复元素;非线性,即无序,没有下标。
1,特点;
不能存放重复元素!以无序的方式存放!无下标
掌握:HashSet
1、提供了增、删除的行为,删除也只能按对象删除
2、没有修改和查询指定元素的行为(因为没有下标)
3、不接受普通for循环。
2,set集合如何判断两个元素重复:
1、它不是判断两个元素是否是同一个对象!
2、而是先调用两个对象的hashcode方法,判断是否返回同一个值;
然后再调用equals方法判断是否返回true;
----所以根据规范,重写equals方法,同时也要重写hashcode方法
同样支持泛型
HashSet<Integer> set = new HashSet<Integer>();
HashSet set = new HashSet();
3,增
set.add("String");
set.add(new Date());
set.add(new StudentBean("小样儿", 18, 70));
set.add(250);
System.out.println(set.size());//获取元素个数
set.add(new String("String"));//不能存放重复元素
set.add(new StudentBean("小样儿", 18, 70));
System.out.println(set.size());
4,删---因为没有下标,所以只能根据对象来进行删除
set.remove(new String("String"));
System.out.println(set.size());
5,改---没有提供修改某个指定元素的方法
6,查---没有获取某个指定元素的方法
7,遍历---不能用普通for
1、for-each
for(Object obj : set){
System.out.println(obj);
}
2、迭代器
Iterator it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
三,Map---映射---特点:以键值对的方式存放元素
1,特点;
不能存放重复元素,无序的方式存放!无下标,所有数据以key---Value的方式存放
hashmap 常用
2,掌握:HashMap的增删查改遍历的API。
补充掌握:Properties操作文件的方法
辨析:
HashMap、Hashtable
1、两者都是Map分支的实现类,拥有相同的API;
2、Hashtable是线程安全的,效率低;HashMap是线程不安全的,效率高
3、Hashtable不允许使用null做键或值,但是HashMap是允许的
(所有键中只能有一个为null)
HashMap<String, StudentBean> map = new HashMap<String, StudentBean>();
Hashtable<String, StudentBean> map = new Hashtable<String, StudentBean>();
3,增---必须保证键不一样
map.put("J136001", new StudentBean("乾隆",24,80));
map.put("J136002", new StudentBean("程骁",28,75));
map.put(null, new StudentBean());
map.put("J136004", null);
System.out.println(map.size());//获取元素个数
4,删---根据键进行删除,如果键不存在不会报异常只会删除失败
map.remove("J136003");
System.out.println(map.size());
5,改---仍然调用put方法,修改传入键所对应的值
map.put("J136002", new StudentBean("王超",32,70));
System.out.println(map.size());
6,查---根据键查找值
StudentBean stu = map.get("J136002");
7,遍历---不能直接遍历Map,只能单独遍历Map的所有键或者所有值
所以在遍历前,要得到所有的键,或所有的值
Set<String> keys = map.keySet();//得到所有的键
Collection<StudentBean> values = map.values();//得到所有的值
1、for-each
for(String key : keys){
System.out.println(key);
}
for(StudentBean tmpStu : values){
System.out.println(tmpStu.getName());
}
2、Iterator
Iterator<String> keyIt = keys.iterator();
while(keyIt.hasNext()){
System.out.println(keyIt.next());
}
Iterator<StudentBean> stuIt = values.iterator();
while(stuIt.hasNext()){
System.out.println(stuIt.next().getName());
}
8,Hashtable和HashMap的区别
1,HashMap;
线程不安全效率高
可以用null做键和值
2,Hashtable;
线程安全效率低
不可以用null做键和值
五,泛型---限制集合只能存放某种元素的。
HashMap<String, StudentBean> map = new HashMap<String, StudentBean>();
<String, StudentBean>
集合框架类的在默认情况下是可以操作任意数据类型的(Object),这本来是
集合要解决的数组三大问题之一。但是在实际操作中,往往我们会把相同数据类型
放到一起做统一处理。----泛型就是用来限制某个集合对象,只能存放某种类型
的元素。
六,拼接接口Comparable从写里边的方法设定排序
当第1个对象根据排序规则所决定的位置 小于 第2个对象根据规则所决定的位置,返回-1
当第1个对象根据排序规则所决定的位置 大于 第2个对象根据规则所决定的位置,返回1
当第1个对象根据排序规则所决定的位置 和 第2个对象根据规则所决定的位置 保持相等,返回0
collections是工具类
int max = Collections.max(lst);
int min = Collections.min(lst);
System.out.println("最大值:" + max);
System.out.println("最小值:" + min);
Collections.sort(lst);//自动按照自然排序(即元素类型自带的内部比较规则)进行排列
Collections.reverse(lst);//对List集合元素进行反转
Collections.shuffle(lst);//混排---随机排序
@Override
public int compare(StudentBean stu1, StudentBean stu2) {
if(stu1.getScore() > stu2.getScore()){
return -1;
}else if(stu1.getScore() < stu2.getScore()){
return 1;
}else{
if(stu1.getAge() < stu2.getAge()){
return -1;
}else if(stu1.getAge() > stu2.getAge()){
return 1;
}else{
return 0;
}
}
七,其他
1,float c=Float.parseFloat(values[2]);字符串转flot
来源:https://www.cnblogs.com/zpcbk/p/6431720.html