集合(06_16-06_17)

分享 HLSO6 ⋅ 于 2020-06-19 23:13:48 ⋅ 最后回复由 青牛 2020-06-19 23:26:29 ⋅ 2180 阅读

集合

集合

集合: 是一个容器,存储 引用类型的数据
集合和数组容器的区别

# 数组 集合
1 可以存储基本类型与引用类型 只能存储引用类型
2 长度固定的 变长的容器

Collection

类型:interface,继承Iterable
单列,可以重复存储

# 常用方法
1 isEmpty()
2 size()
3 addAll(集合)
4 remove()
5 removeAll(集合)
6 contains()
7 toArray()
8 clear()

List

类型:interface,继承Collection
有序,按照元素添加的顺序分配索引,从0开始

# 常用方法
1 add(index,element)
2 get(index)
3 set(index,element)
4 sort(Comparator)
5 subList(start,end)

关于sort排序

    list.sort((s1,s2)-> s2.compareTo(s1));//自定义排序
    list.sort(null);// null 没有自定义规则

实现类:

  • ArrayList
    底层是数组

    public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }
    
    private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
  • Vector
    • Stack
  • LinkedList
    底层是链表
    • 单向链表
    • 双向链表
    private static class Node<E> {
    E item;
    Node<E> next;
    Node<E> prev;
    Node(Node<E> prev, E element, Node<E> next) {
        this.item = element;
        this.next = next;
        this.prev = prev;
    }
}

Set

类型:interface,继承Collection
唯一存储,无序
实现类:

  • HashSet
    唯一存储,无序,底层哈希表
    哈希表:将一组关键字映射到地址集上
    底层实际是HashMap

    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
  • HashSet > LinkedHashSet
    底层是 链表 和 哈希表
    用链表来维护次序,
    按元素的添加顺序
  • SortedSet接口
    • NavigablesSet接口
      • TreeSet 实现类
        底层:二叉树
        有序:默认自然升序,可以自定义次序
        Set<Integer> set1 = new TreeSet<>((n1,n2)-> n2 - n1);

Queue

类型:interface,继承Collection

  • Deque接口
    实现类:

    • ArrayDeque
      受限:只能向队尾添加元素,只能从对头删除元素
    # 添加 删除 获取列表头元素 操作失败时
    1 add remove element 会产生异常
    2 offer poll peed 不会产生异常,返回特定值
    • LinkedList

Map

# 常用方法
1 size()
2 isEmpty()
3 containsKey()
4 containsValue()
5 remove()
6 keySet()
7 values()
8 clear()

实现类:

  • HashMap
    底层哈希表
    线程非安全
    键唯一,无序
    支持null/null
    • LinkedHashMap
      支持null/null
      按元素添加的顺序
  • HashTable
    线程安全

接口:

  • SortedMap<K,V>
    • NavigableMap<K,V>
      • TreeMap实现类
        不支持null/null
        有序,默认自然顺序,自定义顺序
        //1. 匿名对象
        map.forEach(new BiConsumer<Integer,String>() {
        @Override
        public void accept(Integer t, String u) {
        System.out.println(t + "," + u);
        }
        });
        //2.forEach
        map.forEach((k,v)-> System.out.println(k + "," + v));
        // 3. Iterator 迭代器支持集合类型 
        Set<Entry<Integer,String>> set= map.entrySet();
        // 获得迭代器对象
        Iterator<Entry<Integer,String>> i = set.iterator();
        //i.forEachRemaining(System.out::println);// 输出键值对信息
        i.forEachRemaining(e -> System.out.println(e.getKey()+"," + e.getValue()));

迭代器

Iterator

# 常用方法
1 forEachRemaining()
2 hasNext()
3 next()
4 remove()

ListIterator

# 常用方法
1 add(E)
2 hasNext()
3 hasPrevious()
4 next()
5 nextIndex()
6 previous()
7 previousIndex()
8 remove()
9 set(E)
    ListIterator<String> li = list.listIterator();
    // 向后遍历
    while(li.hasNext()) {
        System.out.println(li.next());
    }

file
图片链接

版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-HLSO6,http://hainiubl.com/topics/75148
成为第一个点赞的人吧 :bowtie:
回复数量: 1
  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2020-06-19 23:26:29

    不错,上传一下微信收款二维码,接受一下赏金

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter