集合概念
集合Collection是容器类,用来装载对象,基础类型会自动装箱,长度是不固定的,数组长度是固定的,一般开发中,80%用集合,20%用数组
集合体系
Collection
Set 无序,不重复,可以有一个null
HashSet add、remove、size
TreeSet 所有元素必须实现comparable接口List 有序,可以重复,可以有null
ArrayList 用得最多的,add、remove、get、size
Vector 同上,线程安全,效率低
LinkedList 多了位于首位操作的方法,get、remove、addMap 映射key-value(key不允许重复,可以有一个null,重复添加会被覆盖)
HashMap 用得比较多,put(key,value)、remove(key)、keySet()、values()、entrySet()
Hashtable 线程安全,不允许出现null
TreeMap 同TreeSet一样,key元素必须要实现comparable接口
List接口(除了有Collection接口方法外,还有特殊方法)
1.List是一个有序的Collection接口,可以通过下标访问元素get(i)
2.可以添加可重复的元素,包括多个null元素,add(i,元素),i可以等于size,大于size会越界
3.打印List的三种遍历方法
普通for循环,get(i)访问元素
增强型for循环,foreach(取的元素类型,容器名)
迭代器(解决并发修改)
4.ArrayList和LinkedList在内存中有区别,各有各的特殊方法
Set接口
1.Set是一种无序,去重复的Collection集合,在add时系统“随便”排序
2.HashSet打印可以用迭代器和增强型for循环
3.TreeSet是一个有序,去重复的集合,不纯种的Set
排序
1.泛型:只是一种替换手段,只能放指定类型或者该类型的子类
2.泛型如果是基础数据类型(升序)、String类型(字典顺序),TreeSet在add的时候就会自动排序,List可以用Collections.sort(list)排序;泛型如果是对象,需要实现comparable<>接口,重写compareTo方法 或者是 实现 comparator<>接口,重写compare方法
3.comparable比较器:用自己和其他对象比较(只能创建一个比较器)
Collections.sort(list);
comparator比较器:用两个对象来进行比较(创建多个比较器)
Collections.sort(list, new sort());
Map接口
1.没有继承Collection接口,Map提供三种集合视图:key视图、value视图、key-value视图。其中key不能重复,value可以是对象
2.HashMap(Map的完美实现)提供了两个方法
put(key,value) 把一组键值放入Map
get(key) 从Map集合中将key的value值取出
remove() 移除的同时,返回value的值
3.遍历HashMap 提供三种视图
Set集:Set<Integer> keyset = map.keySet();把key集合提取出来,foreach遍历或者用迭代器打印出来,可以打印value
value集:Collection<String> c =map.values();遍历同上,打印不了key,打印出来的顺序是key值的升序
key-value视图:Set<Entry<Integer, String>> entrySet = hm.entrySet();有点复杂,先凉一边;两种方式打印同上
4.面试题:Hashtable和HashMap区别
(1)命名有问题
(2)线程同步,Hashtable同步,但是效率低
(3)HashMap键值可以是NULL,键只允许一个,Hashtable键值都不允许为null
5.map重复添加key会覆盖
6.TreeMap和TreeSet一样的,TreeMap和HashMap在add会自动排序,但如果要比较对象,HashMap会出错,只有TreeMap才能实现比较器,这就是有序和无序的区别
数据结构(系统中集合的处理)
1.堆栈Stack:先进后出,试用ArrayList和数组(搬家:sysotem.arraycopy)实现put、get、pop