集合--查漏补缺

 

List特点:有序,不唯一(可重复)

ArrayList实现了长度可变的数组,在内存中分配连续的空间。
    • 优点:遍历元素和随机访问元素的效率比较高
    • 缺点:添加和删除需要大量移动元素效率低,按照内容查询效率低
LinkedList采用链表存储方式。
    • 优点:插入、删除元素时效率比较高
    • 缺点:遍历和随机访问元素效率低下

Iterator接口

    • 所有的集合类均未提供相应的遍历方法,而是把遍历交给迭代器完成。迭代器为集合而生,专门实现集合遍历
Iterator方法
    • boolean hasNext():判断是否存在另一个可访问的元素
    • Object next():返回要访问的下一个元素
    • void remove():删除上次访问返回的对象
可以使用Iterator遍历的本质是什么?
    • 实现Iterable接口

ListIterator接口

在循环的过程中可以执行增删操作

1 ListIterator li=al.listIterator();
2 while(li.hasNext()){
3      Object obj=li.next();
4      if ("java2".equals(obj)) {
5             li.add("java9994");
6        }
7 }

set接口

HashSet:采用Hashtable哈希表存储结构

    • 优点:添加速度快,查询速度快,删除速度快
    • 缺点:无序

LinkedHashSet

    • 采用哈希表存储结构,同时使用链表维护次序
    • 有序(添加顺序)

TreeSet

    • 采用二叉树(红黑树)的存储结构
    • 优点:有序(排序后的升序)查询速度比List快 (按照内容查询)
    • 缺点:查询速度没有HashSet快

注★★★

❤HashSet和LinkedSet保证数据唯一的方法是先判断hashcode是否相同,如果相同则比较equals方法,
    如果不同则不用比较,装入的自定义对象要重写hashcode方法和equals方法才可以实现数据的唯一性

❤TreeSet保证数据唯一的方法是存入的数据类型必须需要实现Compareable接口

❤只有TreeSet的toString方法输出的事按照类型实现的有序输出的

Collections的两个sort方法:

1 static <T extends Comparable<? super T>> void sort(List<T> list) 
2                     根据元素的自然顺序 对指定列表按升序进行排序。 
3 static <T> void  sort(List<T> list, Comparator<? super T> c) 
4                     根据指定比较器产生的顺序对指定列表进行排序。 
一个参数的,集合中的数据类型要实现 Comparable接口
两个参数的是根据指定的排序方法,其中第二个参数是实现Comparator的类,重写的compare方法比较的是第一个参数的属性,第一个不用实现任何接口

Map接口

 

Map(接口)

    • 特点key-value映射

HashMap

    • Key无序 唯一(Set)
    • Value无序 不唯一(Collection)

LinkedHashMap

    • 有序的HashMap

TreeMap

    • 有序 速度没有hash快

问题:Set与Map有关系吗?

    • 采用了相同的数据结构,只用于map的key存储数据

HashMap和linkedHashMap的区别

    • 人们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列.
    • HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。
    • HashMap最多只允许一条记录的键为NULL,允许多条记录的值为NULL。
    • HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。
    • LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。

Collections工具类

类似于操作数组的Arrays工具类
    • Collections和Collection不同,前者是集合的操作类,后者是集合接口
    • Collections提供的静态方法
主要方法:
    • static boolean addAll(Collection<? super T> c, T... elements) 将所有指定元素添加到指定 collection 中。
    • static <T extends Comparable<? super T>> void sort(List list) 根据元素的自然顺序 对指定列表按升序进行排序。
    • static void sort(List list, Comparator<? super T> c) 根据指定比较器产生的顺序对指定列表进行排序。

    • static int binarySearch(List<? extends Comparable<? super T>> list, T key) 使用二分搜索法搜索指定列表,以获得指定对象。

    • static int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 使用二分搜索法搜索指定列表,以获得指定对象。

    • static void fill(List<? super T> list, T obj) 使用指定元素替换指定列表中的所有元素。

    • static void reverse(List<?> list) 反转指定列表中元素的顺序。

集合总结几张图

 

集合常见面试题

 

 

posted @ 2015-03-12 19:33  oldmonk  阅读(205)  评论(0编辑  收藏  举报
Fork me on GitHub