Collection和Map入门总结
我们知道最基本的数据结构是数组Array,但是数组由于长度固定、不易读取和修改,所以java集合框架为我们提供了一套功能强大,方面使用的接口和类,在java.util的包中。
下面是对于将常用到的List,Set,Map接口的总结。
整体结构
简单画一下常用的集中集合的结构

各接口的区别
Collection:元素无序、不唯一(可能重复);
List:元素不唯一(可能重复),保证顺序(插入顺序);
set:元素不重复,但无序
map:键值对,key—value,key是set集合,不重复。
List
ArrayList与LinkedList
构造时我一般会指定类型(泛型也可),也可以不指定类型,但是不指定类型默认作为Object(根类),每次读时还要强制转换,且类型放错了编译也不报错。俩这性能并无显著差异,泛型在运行期间会被擦除。
//不指定类型,取出时要强制转换,且运行容易出错
List dog = new ArrayList();
dog.add("d");
dog.add(10);
System.out.println((String)dog.get(0));
System.out.println(dog.get(1) instanceof Integer);
for (Object object : dog) {
System.out.println(object.toString());
}
List平时常用方法:
boolean add(Object o):在列表末尾顺序添加元素,从0开始
addall(),removeAll
void add(int index,Object o):指定位置添加,不要超出索引范围。
int size(),
Object remove(int index);boolean remove(Object o)
boolean contains(Object o);
object get(int index)
clear()

LinkedList是链表实现,有一些特殊常用方法
addFirst、addLast、getFirst、getLast、removeFirst、removeLast
区别
Vector
线程安全,单个元素,效率较低
Set
set保证数据不重复,add重复时会返回false;
TreeSet和HashSet
顺序性
TreeSet有序,HashSet无序
继承
TreeSet实现的是treeMap,hashSet实现的是HashMap,但是因为继承了Set,所以都是单列、不重复的元素集合。
底层存储
HashSet用的是哈希表的结构存储的;判断重复时通过重写hashCode()和equals()的方法来实现,hashCode不同则元素不同。
TreeSet是TreeMap的二叉树结构的存储方式,可以对Set集合的元素进行树排序,性能优良;判断重复通过继承自Compareable接口的compareTo方法来保证。
Map
list集合查找元素要先知道数组下标,有时候满足不了一些功能,map提供利用key检索,比较适合于分类统计、数据缓存的一些程序需求。提供了“列表散列”的结构,其实是列表和数组的结合体
常用方法
Object put(key,value),
Object get(key),
Object remove(key),
int size(),
Set keySet(),返回键的set集合
Collection values(),返回值的集合
boolean containsKey(key)
HashMap与HashTable的区别
HashMap的key可以为null,且最多一个key是null,多个会覆盖;hashTable不可为null。
HashMap数据不会同步,线程不安全,可以用Collections.synchronizedMap(new HashMap<>())返回一个新的Map来进行线程同步,也可以参考ConcurrentHashMap(1.5后才有的)
HashTable线程同步,线程安全,但同时性能会低。
TreeMap
有序集合,但是没有经过线程同步,实现的是Map接口,但比Hash集合要慢。
TreeMap和TreeSet
相同点:
- TreeMap和TreeSet都是有序的集合,也就是说他们存储的值都是拍好序的。
- TreeMap和TreeSet都是非同步集合,因此他们不能在多线程之间共享,不过可以使用方法Collections.synchroinzedMap()来实现同步
- 运行速度都要比Hash集合慢,他们内部对元素的操作时间复杂度为O(logN),而HashMap/HashSet则为O(1)。
不同点:
- 最主要的区别就是TreeSet和TreeMap非别实现Set和Map接口
- TreeSet只存储一个对象,而TreeMap存储两个对象Key和Value(仅仅key对象有序)
- TreeSet中不能有重复对象,而TreeMap中可以存在
参考:
http://blog.csdn.net/geduo_83/article/details/20613233
http://blog.csdn.net/x_i_y_u_e/article/details/46372023
http://blog.csdn.net/speedme/article/details/22661671
浙公网安备 33010602011771号