java容器初识 男娘i 2023-07-21 05:46 24阅读 0赞 ## 1.基本概念 ## Java容器可以被分为两类: * **Collection**:一个独立元素的序列,这些元素都服从一条或者多条规则。 List必须按照插入的顺序保存元素,而set不能有重复的元素。Queue按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)。 * **Map**:一组成对的“键值对”对象,允许你使用键来查找值。 注: 1、**java.util.Collection是一个集合接口。** 它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。 2、**java.util.Collections是一个包装类。** 它包含有各种有关集合操作的静态多态方法。此类不能实例化,**就像一个工具类**,服务于Java的Collection框架。 ## 2.容器集 ## Collection \----List \-------LinkedList \-------ArrayList \-------Vecoter \-------Stack \----Set \------HashSet \------LinkedSet \------TreeSet Map \----HashTable \----HashMap \----WeakHashMap ## 3.同步容器 ## **同步容器保证同一个实例同时只有一个线程能访问** * Vector * Stack * HashTable * Collections.synchronized方法生成 ## 4.并发容器 ## **通过copy一个新的容器来进行修改,这样读操作就不需要加锁,可以并发读,因为在读的过程中是采用的旧的容器,即使新容器做了修改对旧容器也没有影响,同时也很好的解决了迭代过程中其他线程修改导致的并发问题。** * ConcurrentHashMap:线程安全的HashMap的实现 * CopyOnWriteArrayList:线程安全且在读操作时无锁的ArrayList * CopyOnWriteArraySet:基于CopyOnWriteArrayList,不添加重复元素 * ArrayBlockingQueue:基于数组、先进先出、线程安全,可实现指定时间的阻塞读写,并且容量可以限制 * LinkedBlockingQueue:基于链表实现,读写各用一把锁,在高并发读写操作都多的情况下,性能优于ArrayBlockingQueue ## 6.Collection接口 ## Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。JavaSDK不提供直接继承自Collection的类,JavaSDK提供的类都是继承自Collection的“子接口”如List和Set。 ##### 主要方法 ##### boolean add(Object o)添加对象到集合 boolean remove(Object o)删除指定的对象 int size()返回当前集合中元素的数量 boolean contains(Object o)查找集合中是否有指定的对象 boolean isEmpty()判断集合是否为空 Iterator iterator()返回一个迭代器 boolean containsAll(Collection c)查找集合中是否有集合c中的元素 boolean addAll(Collection c)将集合c中所有的元素添加给该集合 void clear()删除集合中所有元素 void removeAll(Collection c)从集合中删除c集合中也有的元素 void retainAll(Collection c)从集合中删除集合c中不包含的元素 ### 6.1 List接口 ### List是有序的Collection,使用此接口能够精确地控制数据的增删改查。 #### 6.1.1 ListArray #### ListArray类实现了链表的操作,是一种非同步的容器,如果需要多线程访问时,需要自己实现同步,通过Collections.synchronizedList(new ListArray<>)方法创建list时构造同步的list,**插入删除效率高** #### 6.1.2 ArrayList #### ArrayList类实现了可变大小的数组,底层通过重新创建一个更大的内存的ArrayList实现扩容,也属于非同步容器,**查找效率高** 一般使用这两个即可,因为非同步意味着效率高 #### 6.1.3 Vector #### Vector类类似于ArrayList类,但是它实现了同步,从一定程度上保证了线程的安全,但它只保证了多个线程在使用同一种方法时安全,但如果多线程使用不同方法调用Vector时不安全 #### 6.1.4 Stack #### Stack类继承Vector,实现了一个堆栈。基本方法有push和pop方法,peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。 ### 6.2 Set接口 ### Set是一种不包含重复的元素的Collection,因此他最多包含一个null值 #### 6.2.1 HashSet #### * 它不允许出现重复元素; * 不保证集合中元素的顺序 * 允许包含值为null的元素,但最多只能有一个null元素。 #### 6.2.2 TreeSet #### TreeSet描述的是Set的一种变体——可以实现排序等功能的集合,它在讲对象元素添加到集合中时会自动按照某种比较规则将其插入到有序的对象序列中,并保证该集合元素组成的读优先序列时刻按照“升序”排列。 ## 7.Map集合接口 ## Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。 ##### 主要方法 ##### * boolean equals(Object o)比较对象 * boolean remove(Object o)删除一个对象 * put(Object key,Object value)添加key和value ### 7.1 HashTable ### HashTable类实现一个key-value映射的哈希表,key和value都不允许出现null值,它是线程安全的。 HashTable的所有方法都是同步的。直接使用对象的hashCode,HashTable中hash数组默认大小是11,增加的方式是 old\*2+1 ### 7.2 HashMap ### null可以作为键,这样的键只有一个,但可以有一个或多个键所对应的值为null。而HashMap中的方法在缺省情况下是非同步的,而HashMap重新计算hash值。HashMap中hash数组的默认大小是16,而且一定是2的指数。 ### 7.3 WeakHashMap ### WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。
相关 初识java 目录 一、Java语言概述 1.1Java的含义 1.2Java语言的重要性 1.3Java语言发展历史 1.4Java语言特性 1.5Java开发环境的安装 二 Bertha 。/ 2024年03月22日 19:53/ 0 赞/ 149 阅读
相关 初识Java 一、Java语言概述 1.1 Java是什么 > Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义 > 不仅如此,Java还是一个有一 我不是女神ヾ/ 2024年02月21日 11:13/ 0 赞/ 89 阅读
相关 初识Java Java简介 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James 不念不忘少年蓝@/ 2023年09月24日 19:53/ 0 赞/ 105 阅读
相关 java容器初识 1.基本概念 Java容器可以被分为两类: Collection:一个独立元素的序列,这些元素都服从一条或者多条规则。 List必须按照插入的顺序保存元素,而se 男娘i/ 2023年07月21日 05:46/ 0 赞/ 25 阅读
相关 初识Java Java Java 是一种可以撰写跨平台应用程序的面向对象的程序设计语言,是1995年SUN公司推出的一门高级编程语言,是面向互联网的语言,WEB应用程序首选的语言。 我会带着你远行/ 2022年12月26日 11:25/ 0 赞/ 183 阅读
相关 初识JAVA Java的起源: Java之父:James Gosling 1995年5.23日正式诞生;Java的形象代表图标 :“一杯热气腾腾的咖啡 水深无声/ 2022年08月09日 04:29/ 0 赞/ 396 阅读
相关 初识java > 注:本人最近在复习整理java开发相关的知识,做java开发两年多的时间了,接触了很多东西,最近考虑整理下来供自己也可以供大家参考,希望大家共同进步。博客会不定时更新补充。 末蓝、/ 2022年06月05日 12:17/ 0 赞/ 320 阅读
相关 初识java 新的学期初识Java,在这一周的Java学习中学习到了两种排序的方法:冒泡法和选择法排序 首先说一下冒泡法 例如一组数据5 9 3 1 6从小到大排列 第一轮 骑猪看日落/ 2022年05月28日 04:55/ 0 赞/ 429 阅读
相关 ( 四 ) 初识 Docker 的容器 文章目录 镜像是容器的前提 容器的产生 \`docker run 镜像 \[其他命令\] \` 浅浅的花香味﹌/ 2022年05月24日 22:23/ 0 赞/ 247 阅读
相关 初识Java 今天算是从c++里脱身了,进入了Java程序员的行列,虽然之前对Java没有了解过,但是出于对c++编程的理解,除了刚开始对编辑环境以及对Java的语法不太熟悉 女爷i/ 2022年05月20日 09:57/ 0 赞/ 355 阅读
还没有评论,来说两句吧...