---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
集合类
一、 java的集合框架(常用):
数据多了用对象装,对象多了用集合装;java提供的常用的集合类框架如下: Collection<Interface> |--List<Interface> (元素可以重复,有序,该集合体系有索引) |--ArrayList (底层数组存储,带脚标) |--LinkedList (底层链表存储) |--vecter |--Set<Interface> ( 元素不可重复,无序) |--HashSet |--TreeSet Map<Interface> |--HashMap |--TreeMap |--HashTable 集合框架总览: 二、Collection根接口 1.Collection共性方法: 添加: add(E e) 添加元素。 addAll(Collection<? extend E> c) 一次添加一堆元素。 删除: clear() 清空容器。 remove(Object o) 删除元素。 removeAll(Collection<?> c) 删除一堆。 判断: contains(Object o) 判断是否包含某元素。 contains(Collection<?> c) 判断是否包含一堆元素。 isEmpty() 判断容器是否为空。 获取: Iterator() 获取迭代器。 size() 获取长度。 retainAll(Collection<?> c) 保留交集,注意:返回值是boolen。 转换: toArray() 转换成数组,数组类型Object。 toArray(T[ ] a) 转换成数据,指定数组类型 2、List特有方法:(带脚标的方法) 添加: add(int index, E e) 在指定位置添加元素。 addAll(int index, Collection<? extends E> c) 在指定位置添加一堆。 删除: remove(int index) 删除指定位置元素。 改:(LIst独有) set(int index, E e) 改变指定位置元素。 判断: 获取: get(int index) 获取指定位置元素。 indexOf(Object o) 返回LIst中第一次出现的指定元素的索引,如不存在返回-1。 lastIndexOf(Object o) 返回LIst中最后一次出现的指定元素的索引,如不存在返回-1。 listIterator() 获取列表迭代器。 listIterator(int index) 获取列表迭代器,从指定位置开始迭代。 subList(int fromIndex, int toIndex) 返回指定范围部分视图。 (1)ArrayList 底层数组存储,查询较快,删除较慢。 特有方法: trimToSize() 将此 ArrayList 实例的容量调整为列表的当前大小。 (2)LinkedList 底层用链表存储,删除快,查询慢(元素只认识旁边元素) 特有方法: 添加: addFirst(E e) offerFirst(E e) 添加元素到开头。 addLast(E e) offerLast(E e)添加元素到结尾。 删除: removeFirst() pollFirst() poll() 返回第一个元素并移除。 removeLast() pollLast() 返回第一个元素并移除。 获取: peekFirst() peek() 获取第一个元素。 peekLast() 获取最后元素。 pop() 从此列表所表示的堆栈处弹出一个元素。 push() 将元素推入此列表所表示的堆栈。 (3)vecter 和ArrayList功能相同,元老级,集合框架是在1.2版本出现的,1.2之前集合容器只有vecter。 与ArrayList的区别: 1、vecter是同步的,效率低,ArrayList是不同步的,高效。 2、vecter和ArrayList初始容量都为10,超过10后,vecter100%延长,ArrayList超过10后50%延长。 vecter特有方法 elemnets() 返回枚举(枚举是vecter的独有取出元素的方法,它共有3种取出方式) 例: Vecter v = new Vecter(); Enumeration en = v.elements(); while(en.hasMoreElements()) { System.out.println(en.nextElement()); } 因为枚举的名称以及方法的名称都过长。 所以被迭代器取代了。 枚举郁郁而终了。(某IO流用到枚举) 3、Set集合
常用方法:都来自与父类Collection。
特点:元素无序不可重复。 (1)HashSet 底层哈希表实现,存储对象的哈希值。 元素的类必须重写hashCode方法,和equals方法。判断元素是否相同时先判断调用hashCode方法比较哈希值,如哈希值相同再比较equals方法。 (2)TreeSet 底层二叉树实现。小值存左大值存右。 元素的类必须实现Runnable接口重写compareTo方法;或者自定义一个比较器(实现Comparator(util包))将比较器传入TreeSet构造方法。 三、Map集合
Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
Set底层实际上使用了Map集合。
(1)添加。
put(K key, V value)
putAll(Map<? extends K,? extends V> m)
(2)删除。
clear()
remove(Object key)
(3)判断。
containsValue(Object value)
containsKey(Object key)
isEmpty()
(4)获取。
get(Object key)
size()
values()
entrySet()
keySet()
1、Hashtable: 底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。 2、HashMap 底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。 3、TreeMap 底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
map集合元素的两种取出方式:
1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。
所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。
Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
而这个关系的数据类型就是:Map.Entry
Entry其实就是Map中的一个static内部接口。
为什么要定义在内部呢?
因为只有有了Map集合,有了键值对,才会有键值的映射关系。
关系属于Map集合中的一个内部事物。
而且该事物在直接访问Map集合中的元素。
|