集合和数组的区别:

集合 - 图2

常用集合的分类:

Iterator
Collection:集合层次结构中的根接口(单列接口,用来存储一个一个的对象)
├——-List 接口:元素按进入先后有序保存,可重复
│—————-├ LinkedList 接口实现类,链表,插入删除,没有同步,线程不安全
│—————-├ ArrayList 接口实现类,数组,随机访问,没有同步,线程不安全
│—————-├ Vector 接口实现类 数组,同步,线程安全
│ ———————-├ Stack 是Vector类的实现类
├——-Set 接口: 仅接收一次,不可重复并做内部排序
│—————├ SortedSet接口:得到集合子集视图
│————————├ NavigableSet接口:搜索和遍历有序集(treeSet实现)
│—————├HashSet 使用hash表(数组)存储元素
│———————├ LinkedHashSet 链表维护元素的插入次序
└ —————├ TreeSet 底层实现为二叉树,元素排好序
├——-Queue接口:先进先出
│—————-├ Deque接口
│—————-├ ArrayDeque:

Map 接口 键值对的集合 (双列集合)—-(不需要迭代器)
├———├SorttedMap接口:得到集合子集视图
├——————–├NavigableMap接口:搜索和遍历有序映射(treeMap实现)
├———├ Hashtable 接口实现类, 同步, 线程安全
├———├ HashMap 接口实现类 ,没有同步, 线程不安全-
│—————–├ LinkedHashMap 双向链表和哈希表实现
│—————–└ WeakHashMap
├ ——–TreeMap 红黑树对所有的key进行排序
└———IdentifyHashMap
image.png

Collection接口:

实现自己的集合类:

  • 拓展AbstractCollection类,该类实现了Collection接口,

    image.png

Iterator迭代器:

image.png

ListIterator:Iterator的子接口

  • ListIterator<String> listIterator = list.listIterator(3);
  • 设置迭代器光标索引位置

image.png

迭代器—-循环遍历

  1. //方式一:
  2. for(int i=0;i<coll.size(); i++){}--->不建议
  3. //方式二:
  4. while(iterator.hasNext()){
  5. System.out.print(iterator.next()+"\t");
  6. }
  7. //方式三:
  8. for(Object obj : coll){
  9. System.out.print(obj+"\t");
  10. }
  11. //方式四:将剩余元素输出
  12. L.iterator().forEachRemaining(arr-> System.out.println(arr));
  13. //方式五:
  14. L.forEach(System.out::println);

注意:

  1. 调用next方法,访问下一个元素;到集合的末尾会抛异常NoSuchElementException
  • 当调用next时,迭代器会越过下一个元素,并返回刚越过的元素
  1. 在调用next方法之前先调用hasnext();
  2. remove()方法将会删除上次调用next方法时返回的元素
  • 如果调用remove之前没有调用next是不合法的
  • 如果删除相邻的两个元素,必须调用next(即不能连续调用两次remove)

迭代器在遍历元素时需要注意的事项:

一、在迭代元素的过程中,不允许使用集合对象改变集合中元素的个数.
二、如果需要添加或者删除,只能使用迭代器里面的方法进行操作.
三、如果使用了集合对象改变了集合中元素的个数,那么就会报:ConcurrentModificationException异常;

  • 即迭代器可以发现集合被另一个迭代器修改或是被集合自身的方法修改了,就会抛出异常;set方法是例外

    注意:

  1. 集合Collection(List、Set[equals、hashcode])中存储的如果是自定义对象
  • 重写equals方法
  1. 传递集合要不传递迭代器好

asList、Collection

  1. Arrays.asList(); 返回一个视图对象,使用toArray转数值
  2. 不是ArrayList集合,所以只能get和set,不能改变数组大小

Integer[] integers = new Integer[10];

  • ist<Integer> list = Arrays._asList_(integers);
  • List<String> list = Arrays._asList_("a","qw","234");
  1. 创建包含10个字符串的List,Collections返回的是集合

List<String> strings = Collections.nCopies(10, "12");

  1. collections:实现了许多算法排序、求最值

子范围

  1. list.subList(10,20); 类似String的substring
  2. 对于有序集和映射集
  • subSet(from,to);、subMap(from,to);
  • headSet(to);、headMap(to);
  • tailSet(to); 、tailMapto);

遗留

Hashtable与hashMap一样,但是方法同步

枚举Enumretion

propertiesMap:属性映射

  • 键与值都是字符串
  • 可以将数据保存到文件中,也可以从文件中读取
  • 使用一个默认的辅助表

    Stack类,拓展为vector

    BitSet位集