Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
├HashSet
│ └LinkedHashSet
└SortedSet
└TreeSet
List接口:
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够用索引来访问List中的元素,List允许有相同的元素。
实现List接口的常用类有LinkedList,ArrayList,Vector和Stack
LinkedList类
LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或者双向队列(deque)。
LinkedList没有同步方法。 如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决办法是在创建List时构造一个同步的List:
List list=Collections.synchronizedList(new LinkedList(…));
LinkedList:链表实现,增删快,查询慢
ArrayList类
ArrayList实现了可变大小的数组,它允许所有元素,包括null。ArrayList没有同步。
数组实现,查询快,增删慢,线程不安全,轻量级;下标也是从0开始
和LinkedList一样,ArrayList也是非同步的(unsynchronized).
Vector类
Vector是同步的。
数组实现,线程安全,重量级
Stack类
Stack继承自Vector,实现后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个远在在堆栈中的位置。Stack刚创建后是空栈。
Set接口
Set是一种不包含重复元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2) = false,Set最多有一个null。
Set实现的基础是map(hashmap)
Hashset:
Hashset的存储方式是把hashmap中的key作为set的对应存储项。
LinkedHashset:是Hashset一个子类,一个链表
Treeset:Sortedset的子类,它不同于hashset的根本就是treeset是有序的。是通过sortedmap来实现的。
Map
├Hashtable
├HashMap
└WeakHashMap
Map接口
Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以当作一组key集合,一组value集合,或者一组key-value映射。
HashTable类
Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。
HashTable是同步的。
HashMap类
HashMap是非同步的,并允许nul,即null value,null key
WeakHashMap类
WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被gc回收。
总结:
如果涉及到堆栈,队列等操作,应该考虑用List,对于快速插入、删除元素,应该使用LinkedList,如果是需要快速随机访问元素,应该使用ArrayList。
如果程序在单线程环境运行,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
特别要注意对哈希表的操作,作为key的对象要正确复写equals和hashcode方法。
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要可以将ArrayList换成LinkedList时,客户端代码不用改变。
同步性:
Vector是同步的,是线程安全的,而ArrayList是异步的,是非线程安全。同步的要求会影响执行的效率,所以如果不需要线程安全的集合那么使用ArrayList。
数据增长:
从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合的对象。当向这两种类型中增加元素的时候,如果元素的数据超出了内部数组目前的长度塔门都需要扩展内部数组的长度。Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最好你获取的这种集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。
相关推荐
java基础 包含:java IO、java 并发、java 基础、java 容器、java 虚拟机
Java开发案例-springboot-55-undertow替换默认tomcat容器-源代码+文档.rar Java开发案例-springboot-55-undertow替换默认tomcat容器-源代码+文档.rar Java开发案例-springboot-55-undertow替换默认tomcat容器-源代码...
【第12章_集合框架】是Java库的重要组成部分,包括ArrayList、LinkedList、HashMap等常用容器的使用,学习者需要熟练掌握它们的特点和应用场景。 【第17章_反射机制】是Java的高级特性,允许在运行时动态地获取类的...
- **变量**:在Java中,变量是存储数据的容器,分为基本类型(如int, double, boolean等)和引用类型(如类、接口、数组)。 - **数据类型**:Java有两大类数据类型,即原始类型(primitives)和引用类型...
以下将详细介绍JAVA的基础内容,包括JAVA概述、语言基础、面向对象编程、异常处理机制、数组、常用类、容器类、流技术、多线程机制和网络编程。 首先,JAVA是一种面向对象的编程语言,它的历史可以追溯到1995年,由...
Apache SkyWalking 是一个开源的应用性能监控(APM)系统,尤其专注于微服务、容器化和云原生环境。它的Java代理是其核心组件之一,用于收集应用运行时的数据。在这个"apache-skywalking-java-agent-8.9.0"版本中,...
通过这些练习,你将巩固对Java容器的理解,提高代码编写效率,并为解决实际问题打下坚实基础。记得在实践中不断挑战自己,尝试不同的场景和数据结构,以便更好地掌握Java容器的精髓。祝你在学习过程中取得优异的成绩...
这是MySQL最新的jar,mysql-connector-java-8.0.18.jar
这份"java-java面试题库整理-基础-JVM-线程并发-框架等.zip"文件提供了一个全面的复习资源,帮助求职者准备Java相关的面试。 1. **Java基础知识** - 类与对象:Java是一种面向对象的语言,了解类的定义、构造器、...
Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标...
在Java中,`JFrame` 是窗口容器的基础类,它是顶级容器,用于承载其他组件。在扫雷项目中,`JFrame` 作为游戏的主要窗口,承载着游戏面板、计时器、分数显示等各个部分。开发者会定义一个`JFrame`实例,并在其上添加...
java教程-使用Docker容器安装系统配置及Docker容器的使用方式
3. **Java第05章 - 数组与集合**:在这一章,学习者会接触到数组,它是存储多个同类型元素的容器。同时,集合框架(如ArrayList、LinkedList、HashSet等)也是重点,它们提供了更加灵活的数据存储和操作方式。 4. *...
SkyWalking适用于分布式系统的应用程序性能监控工具,专为微服务、云原生和基于容器 (Kubernetes) 的架构而设计。 SkyWalking在8.8.0版本以后将agent进行了单独拆分,因此若要使用8.8.0版本以后的,需要下载apm和...
6. **Optional类**:`java.util.Optional`是Java 8新增的一个容器类,用于表示可能为null的值,它帮助开发者避免空指针异常,改善代码的健壮性。 7. **默认方法**:在接口中引入了默认方法,允许接口提供默认实现,...
Java的基础包括语法结构、数据类型、变量、运算符以及控制流程。数据类型分为基本类型(如int、char、boolean)和引用类型(如类、接口和数组)。变量是用来存储数据的容器,而运算符则用于执行数学或逻辑操作。控制...
1. **介绍**:介绍JavaConfig的基础概念,包括快速入门教程。 2. **API参考**:详细介绍JavaConfig API的各项功能。 3. **附录**:涵盖工具及其他实用考虑,不作为核心文档的一部分。 #### 目标读者 本文档假定读者...
在物联网项目或者需要与MQTT兼容的服务交互的Java应用中,这个压缩包可以作为基础组件使用。同时,对于理解JRuby如何处理字节数据的历史演变,`bytelist`源代码也是宝贵的参考资源。开发者可以根据项目需求,选择性...
下面,我们将深入探讨Java编程的基础知识,帮助你更好地理解和掌握这门强大的语言。 1. **Java简介**:Java是由Sun Microsystems(现已被Oracle公司收购)于1995年发布的,由詹姆斯·高斯林(James Gosling)领导的...
4. **Java EE(Java Platform, Enterprise Edition)**: 也称为Java EE或Jakarta EE,是Java Web开发的基础框架,提供了一系列API和服务器环境,如Servlet、JSP、EJB(Enterprise JavaBeans)、JMS(Java Message ...