集合①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 时才返回 trueget(index)
set(index,Obj)remove(index)remove(Object)如果是数字,直接是传下标那个,OBject里边有数字的,是自动封箱的包装类,不是基本数据类型Set的方法:
addremovesizacontainsMap的方法:
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方法结束