1. 类图:
2. 集合类说明:
1) COLLECTION
一、 LIST
1> ARRAYLIST(线程不安全): 内部实现就是Object数组,使用了JAVA泛型,构造函数默认数组长度为10。
(1) 如果通过构造函数,来获取到新的arrayList对象,则数组长度计算方法:
Java代码
// Allow 10% room for growth
int capacity = (int) Math.min((size*110L)/100, Integer.MAX_VALUE);
// Allow 10% room for growth
int capacity = (int) Math.min((size*110L)/100, Integer.MAX_VALUE);
capacity变量就是目前数组的可用长度,设计上预留了10%用作后续的增长,所以每次
(2) 如果是add()方法加入,则新的可用长度计算方法如下:
int newCapacity = (oldCapacity * 3)/2 + 1;
(3) 通过clone()方法,则不会修改长度;
2>LINKEDLIST(线程不安全): 内部实现通过内部类Entry实现了对象链:
Java代码
Class Entry{
E element;
Entry<E> next;
Entry<E> previous;
…
}
Class Entry{
E element;
Entry<E> next;
Entry<E> previous;
…
}
2) VECTOR(线程安全): 內部的实现与arrayList有点类似,都用了数组,但是两者的区别如下:
(1) vector是线程同步的,所以它也是线程安全的,而arraylist是线程异步的,是不安全的。如果不考虑到线程的安全因素,一般用arraylist效率比较高。
(2) 如果集合中的元素的数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而arraylist增长率为目前数组长度的50%.如过在集合中使用数据量比较大的数据,用vector有一定的优势。
(3) 如果查找一个指定位置的数据,vector和arraylist使用的时间是相同的,都是0(1),这个时候使用vector和arraylist都可以。而如果移动一个指定位置的数据花费的时间为0(n-i)n为总长度,这个时候就应该考虑到使用linklist,因为它移动一个指定位置的数据所花费的时间为0(1),而查询一个指定位置的数据时花费的时间为0(i)。
Vector 在对elementData进行处理的方法,都加了synchronized,实现线程同
步。
1>STACK(线程安全): Stack继承自Vector,实现了栈的功能,同时是线程安全的。
二、 SET
1>HASHSET(线程不安全):
内部是用HashMap来实现的,所以它实现了键值的对应
Java代码
private transient HashMap<E,Object> map;
private transient HashMap<E,Object> map;看看它的添加方法:
Java代码
public boolean add(E o) {
return map.put(o, PRESENT)==null;
}
public boolean add(E o) {
return map.put(o, PRESENT)==null;
}其中PRESENT变量是
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
它是一个final且静态的变量,它用来在添加的时候,作为value出现,而map是key唯一的,所以在添加HashSet时,加入的对象都是作为 HashMap的Key保存,同时必定唯一。
2>TREESET
内部是用SortedMap来实现的,所以它实现了键值的对应
Java代码
private transient SortedMap<E,Object> m;
private transient SortedMap<E,Object> m;实现方式与HashSet类似,但是它有新的方法
3. MAP
2) HASHMAP
实现了键值对应关系,同事map中不会存在null值,当add时 KEY值为null,则会为该value添加默认的key值,
Java代码
/**
* Value representing null keys inside tables.
*/
ic final Object NULL_KEY = new Object();
/**
* Value representing null keys inside tables.
*/
static final Object NULL_KEY = new Object();
但是我想如果同时插入两个key为空的VALUE值,那不是前一个值被冲掉了么。
实验了一下:
Java代码
Map map = new HashMap();
map.put(null, 11111);
System.out.println("before:" + map.get(null));
map.put(null, 22222);
System.out.println("after:" + map.get(null));
果然打印结果为:
before:11111
after:22222
Map map = new HashMap();
map.put(null, 11111);
System.out.println("before:" + map.get(null));
map.put(null, 22222);
System.out.println("after:" + map.get(null));
果然打印结果为:
before:11111
after:22222
保存值的实现方案是,用内部类
Java代码
transient Entry[] table;
static class Entry<K,V> implements Map.Entry<K,V> {
final K key;
V value;
final int hash;
Entry<K,V> next;
…
}
transient Entry[] table;
static class Entry<K,V> implements Map.Entry<K,V> {
final K key;
V value;
final int hash;
Entry<K,V> next;
…
}
通过计算计算当前值的hashcode来确定值在table[]中的位置,然后保存。
2> SORTEDMAP:
定义了排序的接口
3> TREEMAP
基本实现与hashMap差不多,只是其内部类实现方式不同,它是通过排序决定插入值的位置,同时也是通过对象数组实现。
分享到:
相关推荐
【Java集合】 Java集合框架是Java编程语言中用于存储和操作对象的工具,它提供了多种数据结构,如列表、集、映射等,以适应不同的数据处理需求。集合类通常位于`java.util`包下,是Java程序员必备的知识点。 1. **...
这篇学习笔记将深入探讨Java集合框架的基础概念、主要类库以及常见应用场景。 首先,Java集合框架分为两种基本类型:List(列表)和Set(集)。List接口代表有序的集合,允许重复元素,如ArrayList和LinkedList;而...
031108_【第11章:Java常用类库】_Math与Random类笔记.pdf 031109_【第11章:Java常用类库】_NumberFormat笔记.pdf 031110_【第11章:Java常用类库】_大数操作(BigIntger、BigDecimal)笔记.pdf 031111_【第11章:...
本篇将详细探讨Java集合框架的基础知识,包括核心接口、类的层级结构以及Java 5引入的泛型特性。 首先,让我们了解一下`java.lang.Class`。`Class`类在Java中扮演着特殊的角色,它不仅是一个普通类,而且是用于获取...
3. **Day0804_整理ArrayList、LinkedList、Vector、HashSet、TreeSet、HashMap的异同点.docx**:这个文档对比了Java中几个主要集合类的特性。ArrayList、LinkedList和Vector都是List接口的实现,它们之间的差异在于...
7. Collection集合框架:Java集合框架的概述。 8. List集合和Set集合:不同集合的实现类和特性。 9. Map集合:键值对集合的使用。 10. 单例模式和模版方法模式:再次提及设计模式的内容。 五、JavaSE核心II 1. 异常...
《良葛格Java 学习笔记(繁体全)》是一部详尽的Java学习资源,旨在帮助初学者和进阶者深入理解Java编程语言。笔记内容涵盖了从基础语法到高级特性的广泛领域,以繁体中文呈现,适合中文阅读习惯的用户。下面将对其中...
泛型允许我们在集合类中存储特定类型的对象,提高了代码的复用性和安全性。 2. **Autoboxing和Unboxing(自动装箱与拆箱)**:Java 5.0简化了基本类型与对应的包装类之间的转换。现在,你可以直接将一个整数赋值给...
在这个阶段的学习中,尚硅谷提供了2023年的学习笔记和面试题,帮助你提升Java技能并为求职做好准备。 首先,多线程是Java的一个关键特性,允许程序同时执行多个任务。理解线程的创建(通过Thread类或实现Runnable...
本压缩包文件“《java学习》-Java 学习笔记.zip”包含了丰富的学习资源,帮助初学者和进阶者深入理解Java编程。 1. **Java基础知识** - **语法**:Java的基础语法包括变量、数据类型、运算符、流程控制语句(如if-...
10. **源码阅读**:学习和理解一些开源项目的源码,如Apache Commons、Guava等。 这份"java校招学习笔记"应该是一个全面的参考资料,帮助求职者巩固Java知识,提高解决问题的能力,以应对面试中的各种挑战。同时,...
2. 创建类与对象:学习如何声明和实例化对象。 3. 引用类型:除了基本类型外,Java中的所有类型都是引用类型。 4. 内存管理:JVM通过堆、栈和方法区来管理内存。 5. 继承:Java中类可以通过继承关系复用代码。 6. ...
这本"Java并发编程学习笔记"可能是作者在深入研究Java并发特性、工具和最佳实践过程中积累的心得体会。下面,我们将根据这个主题,探讨一些关键的Java并发编程知识点。 1. **线程与进程**:在多任务环境中,线程是...
《Java JDK6学习笔记》是由林信良编著的一本针对Java初学者和进阶者的学习资料,书中详细讲解了Java编程语言与JDK6版本的相关知识。这本笔记不仅包含传统的Java学习内容,还结合了作者独特的见解和实践经验,为读者...
Java集合框架提供了实现特定数据结构的接口和类。 **Set接口**:不允许重复元素。 **List接口**:有序且允许重复元素。 **Map接口**:存储键值对映射关系。 **Set接口** - **HashSet**:基于哈希表实现,元素...
### Java学习笔记整理 #### 1. Java简介 ##### 1.1 计算机编程和开发语言 计算机系统由硬件系统和软件系统组成。软件系统又进一步细分为系统软件和应用软件。其中,系统软件包括操作系统、编译系统、数据库系统等...
- 文件操作:学习File类,进行文件的创建、读写和删除。 - 缓冲流:理解BufferedReader和BufferedWriter提高读写效率的作用。 - 转换流:学会使用InputStreamReader和OutputStreamWriter在字节流和字符流之间转换...
### JAVA学习笔记(全面) #### 一、Java技术基础 ##### 1.1 编程语言 编程语言是计算机能够理解和执行的一种指令集。根据不同的编程思维和应用场景,编程语言可以分为以下几类: - **机器语言**:由二进制代码...
#### 四、Java集合框架 **4.1 接口继承关系和实现** - **Collection**: 根接口,集合框架的核心接口。 - **Set**: 无序且不包含重复元素的集合。 - **List**: 有序且可以包含重复元素的集合。 - **Map**: 存储键值...