3.9 java基础总结集合①LIst②Set③Map④泛型⑤Collections
集合①LIst②Set③Map④泛型⑤Collections
一、List:有顺序,可重复
实现类:
1、ArrayList 广泛,适用于查询,增删不频繁的(类似数组,其长度可按需增大,增删效率慢)
2、LinkedList 中间频繁增删的,查询效率低(双向链表,先进先出,不支持随机查找,必须重头开始查找,效率低)
3、Vector 类似ArrayList,线程安全,性能低
二、Set:没有顺序,不可重复
最多存一个null
实现类:
1、HashSet 速度快,不排序
2、TreeSet 速度慢,内部排序,看不到
3、LinkedHashSet 有序,不重复,顺序为放入顺序
三、Map 键值对 key-value 键不能重复,值可以。两者都可以是任意类型的对象实例
实现类:
1、HashMap 速度快,不排序
2、TreeMap 速度慢,内部排序
3、LinkedHashMap 排序
Linked:链表,前边加了这个的都表示有序的
List,Set 是Collection的子接口,Map不是,
Colection 的方法:
Size,add,remove ,clear , toArray;
List 的方法:
add(index,obj)
contains(Object o) 判断是否包含
//包含,比较的时候调用当前类型的equals方法,如果没有重写,就是Object的equals方法,即引用。所以重写equals方法可以达到想要的结果
//当且仅当列表包含满足 (o==null ? e==null : o.equals(e)) 的元素 e 时才返回 true
get(index)
set(index,Obj)
remove(index)
remove(Object)
如果是数字,直接是传下标那个,OBject里边有数字的,是自动封箱的包装类,不是基本数据类型
Set的方法:
add
remove
siza
contains
Map的方法:
put(K,V) 重新put可覆盖前边录入的信息
-get(key)
remove(key)
containskey(k)
containsvalue(value)
keySet() 所有键形成Set(不重复)
values() 所有值形成collection(可以重复)
四、泛型:允许在定义类、接口时指定类型形式参数,这个类型形式参数将在声明变量、创建对象时确定。
指定了某种类型,只能放这种类型
List<Student> group = new ArrayList<Student>();
就只能放Student类型的,不用强转,也防止了加入其它类型
自己定义泛型
public class Hello<T>{
T t;//这里可不要,成员变量T
//类上边定义的泛型,只要有<>就可以了,里边是变量名,可以随便取名字,一般E表示元素,KV键值
public Hello(T t){
}
}
五、Collections工具类
1、Collections.sort(list);
自然顺序,可以排基本数据类型,String,包装类,引用的不可以,所以要自己设定排序规则
当设定排序规则后,这个就可以调用了
2、
public class Student implements Comparable{
public int compareTo(Object obj) {
Student stu = (Student)obj;
if(this.age > stu.getAge()){
return -1;
}else if(this.age < stu.getAge()){
return 1;
}
return 0;
}
}
这里还可以添加其他比较规则,比如年龄等等
大的排前边(从大到小)返回-1,因为数轴上小的在左边,
3、匿名内部类
Collections.sort(group, new Comparator<Student>(){
@Override
public int compare(Student in1, Student in2) {
if(in1.getName().compareTo(in2.getName()) > 0){
return -1;
}else if(in1.getName().compareTo(in2.getName()) < 0){
return 1;
}else{
return 0;
}
}//方法compare结束
}//类Comparator结束
);//sort方法结束