🚩 Home / java / collection.md

Collection

  • add()
  • addAll()
  • clear()
  • contains()
  • remove()
  • size()
  • toArray()
  • iterator() 将集合变为iterator接口返回

现在使用更多的是Collection的两个子接口(1)允许重复的List接口和(2)不允许重复的Set接口

List

  • get(int index)
  • set(int index ,E element)
  • listItertor()

三个常用子类:

  • ArrayList
    • 数组实现
    • 使用时估算数据量,超过10个数据使用有参构造,避免垃圾数组的空间产生
  • LinkedList
    • 基于链表实现
  • Vector
    • 跟ArrayList是相似的,但是它是线程安全的,即所有操作都是线程同步的。

Set

集合中不能有重复元素

  • HashSet
    • 数据是无序的
    • 利用Object的hashCode() equals()方法判断,可以使用eclipse生成
  • TreeSet
    • 保存的数据是有序的,按照数据升序排序
    • 判断数据重复是通过Comparable接口实现的

集合输出

  • Iterator输出

    • hasNext()

    • next()

    • remove()

      public class MainTest { public static void main(String[] args) throws Exception{

        Set<String> all = new HashSet<>();
        all.add("ccc");
        all.add("aaa");
        all.add("bbb");
        Iterator<String> iterator = all.iterator();
        while(iterator.hasNext()) {
            String string = iterator.next();
            System.out.println(string);
        }

      } }

Collection中的remove()和Iterator中的remove()

迭代输出时,使用Collection.remove()会造成并发更新的异常,导致程序出错。此时只能使用Iterator.remove()来实现删除功能。

  • ListIterator输出

    • Iterator迭代输出值允许由前向后输出,需要双向迭代处理需要使用ListIterator实现。专门为List提供,Collection中并没有提供相关方法。
    • hasPrevious(),但需要先向后迭代将指针移至最后
    • previous()
  • Enumeration枚举输出

    • 为Vector服务
  • foreach()输出

    • 使用for输出

    • list.forEach((e) → {})本质上就是使用的for循环遍历

Map<K, V>接口

map的作用主要用于数据查找。键值对的方式。

  • put(key, value)
  • get(key)
  • entrySet()
  • containsKey(key)
  • keySet()

HashMap子类

  • 设置相同key的内容的时候put()方法返回原始数据内容
  • HashMap容量扩充:
    • 该类提供yige"DEFAULT_INITIAL_CAPACITY"常量,作为初始化容量为16个元素
    • 当保存的内容超过阈值(DEFAULT_LOAD_FACTOR= 0.75f)就会进行容量扩充
    • 采用成倍扩充模式

LinkedHashMap

  • 数据有序,保存顺序为添加顺序

HashTable

  • jdk1.0开始
  • HashTable设置的key和value都不能为空
  • 都是同步方法,线程安全的。

Map.Entry接口

作为key和value的一个包装类使用

利用Iterator输出Map集合

public class MainTest {
    public static void main(String[] args) throws Exception{
        Map<String, Integer> map = new HashMap<>();
        map.put("one", 1);
        map.put("two", 2);
        Set<Map.Entry<String, Integer>> set = map.entrySet();
        Iterator<Map.Entry<String, Integer>> iter = set.iterator();
        while(iter.hasNext()) {
            Map.Entry<String, Integer> mEntry = iter.next();
            System.out.println(mEntry.getKey() + " = " + mEntry.getValue());
        }
     }
}

自定义Key的类型要覆写hashCode()和equal()方法。

stack

queue

Properties

  • HashTable的子类
  • 操作的类型只能是String

Collections工具类

Stream数据流处理

  • 支持大数据处理,都是使用函数式接口来处理,对数据进行统计,收集。