美文网首页
Java-集合

Java-集合

作者: 没有了遇见 | 来源:发表于2024-02-18 08:31 被阅读0次

Java 集合

1:集合的产生???
程序运行中我们会创建非常多的对象,为了对这些对象存放和管理,就提出了容器的概念.
数组就是一个容器,但是数组长度是固定的,这时候就出现了一个集合的概念.

1:什么是集合
Java集合:是一个用来存放对象的容器

注意:
1:集合只能存储对象,基本数据类型,会自动转换成对象类然后存入
2:集合存储的是对象的引用而非本身,对象还是存在堆内存中
3:集合可以存放不同类型 不限制数量(泛型统一类型,自动扩容)

问题:

集合和数组的区别
1:长度不同 结合不固定长度 数组固定长度
2:数据不同 数组存储基本数据类型和引用数据类型 集合只能存储引用数据类型(基本数据类型会转换为对象)
3:存储元素不同 数组只能存储同一种类型元素 集合存储多种数据类型(一般也是存储一种数据类型,泛型规范数据类型)

类型图:
https://img2018.cnblogs.com/blog/1175569/201908/1175569-20190813185822827-390071136.png

集合:
Collection 单列集合 实现 Iterable 接口 封装了 Iterator 迭代器

Map 双列集合 key values 形式存储数据

结构:

Collection ---> AbstractCollection extends Collection

            -->AbstractQueue implements AbstractCollection
            -->AbstractList  implements AbstractCollection
            -->AbstractSet   implements AbstractCollection

Collection ---> List
---> AbstractList extends AbstractCollection implements List

                                ---> ArrayList extends AbstractList implements  List<E>
                                
                                ---> Vector extends AbstractList<E> implements  List<E>
                                            ---> Stack                  
       ---> Set
                --->AbstractSet extends AbstractCollection  implements Set
                                --->HashSet extends AbstractSet<E> implements Set<E>

                                无序唯一 允许Null
                                            ---> LinkedHashSet 链表+hash 有序唯一 允许Null
                                            --->TreeSet
                ---> SortedSet<E> extends Set<E>
                
                            --->TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>
                            
                               自然排序 定义排序 不能未空
                            
       ---> Queue extends AbstractQueue  implements Set
       
                --- AbstractQueue extends   AbstractCollection implements Queue<E>
                
               LinkedList extends AbstractQueue implements List<E>, Deque<E

Collection 实现 ---> AbstractCollection 实现Collection接口

                                --->AbstractList 继承 AbstractCollection 实现List接口
                                                ---> AbstractSequentialList
                                                                            --->LinkedList
                                                --->Vetor
                                                        --->Stack
                                                --->ArrayList AbstractList (实现List 接口)      

Map --->AbstractMap implements Map
--->HashMap 允许 NUll key 0
--->LinkedHashMap
--->ConcurrentHashMap
--->WeakHashMap

--->SortedMap extends Map
            --->TreeMap
            
 --->HashTable  extends Dictionary  implements Map  HashTable  key values 都不能为空 
            ---> Properties

Vector、HashTable extends Dictionary 、 ConcurrentHashMap extends AbstratMap Properties extends Hashtable 线程同步,线程安全 其他不安全

问题:
Hash冲突??
hash 是将数据生成一个int类型的数字,数据是无线的hashCode 是有线的 所以当不同数据得到相同的hashCode的情况就叫Hash冲突
解决方案: 再hash

/**
* 集合去重
*/
public static void processList() {

    ArrayList<String> arrayList = new ArrayList<>();
    long sTime;
    for (int i = 0; i < 10000; i++) {
        arrayList.add("位置:" + i);
        if (i % 2 == 0) {
            arrayList.add("位置:" + i);
        }
    }
    
    sTime = System.currentTimeMillis();
    //因为 LinkedHashSet 链表+hash 实现  数据唯一 有序  
    LinkedHashSet<String> linkedHashSet = new LinkedHashSet<String>(arrayList);
    List newList = Arrays.asList(linkedHashSet.toArray());
    ArrayList<String> arrayList3 = new ArrayList<String>(newList);
    System.out.println("时间:" + (System.currentTimeMillis() - sTime) + "");
    System.out.println("数据:" + arrayList3);

}

Collection 单列集合

Collection接口 提供了迭代器的方法 提供了add contains remove clear() size() 等方法

1:List 继承于Collection接口 有序可重复集合(允许Null) 提供了get 方法
    List接口继承于Collection接口拥有迭代器访问的属性,同时提供了有序存储和获取的方法 可以根据索引获取对象
    
    1:ArrayList实现有序访问可重复
            问题:ArrayList实现有序访问原因?
    add()的时候 数组+System.arraycopy()  通过索引存储
    2: Vector 和ArrayList 相似 同步线程安全(add方法 synchronized 修饰,所以是同步的)
    LinkedList LinkedList是采用双向循环链表实现,LinkedList是List接口的另一个实现 有序  不唯一
    既可以当一个接口也可以链表操作
    集合链表实现 
    
 数组:查询快,增删慢
 链表:查询慢增删快
 
 功能:
 ArrayList 底层数组 有序不唯一   线程不安全
 Vector    和ArrayList一样  线程安全
 LinkedList: 实现了Queue接口和List 接口 底层双链表 有序 不唯一  查询慢 增删快
    
    
2:Set 继承于Collection接口无序集合 Set代表无序不可重复集合,只能根据元素本身来访问

    HashSet 怎么实现唯一 ? hash保证唯一
    内部维护了一个HashMap 利用Key 唯一的特点存储数据保证唯一(会出现hash冲突)线程不同步
HashSet  LinkedHashSet  TreeSet 

HashSet 底层HashMap 数据唯一 
LinkedHashSet 继承 HashSet实现了数据唯一 调用addAll()数据通过角标添加到容器保证了顺序   
TreeSet 红黑树 支持排序

3:Queue继承于Collection接口 
    3.1是Java中定义的一种队列数据结构,元素是有序的(按插入顺序排序),先进先出(FIFO)原则
    3.2通常,队列不允许随机访问队列中的元素
LinkedList

相关文章

  • Java-集合

    Collection: 在Java类库中,集合类的基本接口是Collection接口,这个接口有两个基本方法: 迭...

  • JAVA-集合

    JAVA集合 Java集合是使程序能够存储和操纵元素不固定的一组数据。 JAVA中的集合是一个类似一个‘’容器‘’...

  • Java-集合

    List接口特点: 允许重复元素必须是有序的可以放入null元素 ArrayList特点 里面维护的是一个数组 默...

  • java-集合

    CollectionListSet泛型MapCollections Collecton1.1 集合知识回顾集合类的...

  • Hello Java

    目录 Java-基础(1/6) Java-对象(2/6) Java-核心库类 上(3/6) Java-核心库类下(...

  • java- 集合类

    https://github.com/LRH1993/android_interview/blob/master/...

  • java-集合包

    Collection List必须保持元素特定的顺序 Set不能有重复元素 Queue保持一个队列(先进先出)的顺...

  • Java-集合详解

    数组时大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)java集合可以存储和操作数目不固定的...

  • Java-集合框架

    Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map...

  • JAVA-集合addAll

    集合的addAll方法括号里不能为null 为什么要用到addAll?这还得从我的进度凭证更新管理页面说起……我的...

网友评论

      本文标题:Java-集合

      本文链接:https://www.haomeiwen.com/subject/mcwuadtx.html