1. 表的java实现
咱们程序员入门C语言一开始就介绍的
1.1 数组实现
主要就是查询快,删除,插入 时间复杂度O(N),比如删除第一个元素,那么后面的元素就要整体向前移动,而查询就比较简单了时间复杂度O(1)
1.2 链表实现 : 插入删除快,查询较复杂
2. ArrayList 数组实现
预先定义的基本属性
// 默认的容量 private static final int DEFAULT_CAPACITY = 10; // 长度 private int size; // 元素 private E [] items;用数组来保存list里面的元素。
2.1 capacity 容量
capacity 是什么样一个概念:感觉很直观的理解就是一个预先估计的容量,为后面新来的元素有了一个准备,不必每次新添加元素这边都要做扩容处理影响效率(所以ArrayList在空间上这部分是浪费的)。
public void ensureCapacity(int newCapacity){ if ( newCapacity < size) { return; } E [] old = items; items = (E []) new Objects [newCapacity]; for (int i = 0; i < size(); i++) { items [i] = old[i]; } }
2.2 add
public void add (E ele) { add(size(), ele) ; } public void add (int index, E ele) { if ( items.length == size()) { // 扩容机制 jdk 1.5 倍 + 1 ensureCapacity (size() * 2 + 1); } // 插入点,向后移动,后面有位置 for ( int i = size; i > index; i-- ) { items [i] = items [i - 1]; } items[index] = ele; }
2.3 remove
public E remove (int index) { E removeItem = items[index]; // 向前缩进 for ( int i = index; i < size() - 1; i++) { items [i] = items[i - 1]; } size --; return removeItem; }
3.LinkedList 实现
3.1 Node 节点
LinkedList 是双链表来实现的,由节点来构成的,因此我们同时定义了一个节点类Node(内部嵌套)
public class Node<E> { public E data; public Node<E> prev; public Node<E> next; public Node(E data, Node<E> prev, Node<E> next){ this.data = data; this.prev = prev; this.next = next; } }
初始化
public MyLinkedList () { clear(); } public void clear () { beginMarker = new Node<E>(null, null, null); endMarker= new Node<E>(null, beginMarker, null); beginMarker.next = endMarker; size = 0; }
3.2 Node 插入点,删除点
由于链表添加删除,与操作位置上的节点有关系因此操作前要获取位置上的操作节点
public Node<E> getNode (int index){ return getNode(index, 0, size()-1); } public Node<E> getNode (int index, int lower, int upper){ Node<E> p; if(index < lower || index > upper) { throw new IndexOutOfBoundsException(); } // 判断从前开始还是从后开始,减少循环次数 if (index < size()/2) { p = beginMarker; for (int i = 0; i < index; i++){ p = p.next; } }else { p = endMarker; for (int i = size(); i > index; i--) { p = p.prev; } } return p; }
3.3 Node 新增
public void add(int index, E ele){ addBefore( getNode(index, 0, size()), ele); } public void addBefore(Node<E> p, E e){ Node<E> newNode = new Node<E>(e, p.prev, p); p.prev.next = newNode; p.prev = newNode; size ++; }
3.3 Node 删除
public void romove(int index){ romove(getNode(index, 0, size()-1)); } public void romove(Node<E> p){ p.prev.next = p.next; p.next.prev = p.prev; size--; }
4.总结
ArrayList,LinkedList都是非同步的。这点区别于Vector
相关推荐
本学习笔记由黑马程序员提供,旨在帮助初学者深入理解Java中的集合框架及其使用方法。 首先,我们来探讨“集合”的基本概念。在Java中,集合是一个对象容器,可以容纳多个元素,这些元素可以是任意类型的数据。Java...
ArrayList、LinkedList和Vector都是List接口的实现,它们之间的差异在于数据结构和性能:ArrayList适合随机访问,LinkedList适合顺序访问和频繁插入删除,Vector线程安全但效率较低。HashSet和TreeSet是Set接口的...
【Java学习笔记】北大青鸟课程精华解析 Java是一种广泛使用的高级编程语言,以其平台无关性、面向对象的特性以及强大的安全性能而受到广大开发者喜爱。北大青鸟作为知名的IT培训机构,提供了丰富的Java教学资源,这...
在这个学习笔记中,我们将深入探讨集合的特点、集合与数组的区别、集合的主要接口和实现类,以及如何使用迭代器和各种方法来操作集合。 1. **集合特点**: - 集合仅用于存储对象,不同于数组可以存储基本数据类型...
学习笔记(持续更新中) 所有文章均同步发布到微信公众号【JavaRobot】,关注微信公众号,及时得到文章推送,谢谢支持。 说明:如无特别说明,所有代码都基于JDK8 JavaSE(Java基础) Java Core 关键字 synchronized...
2. 集合:在13集合.md中,详细讲解了Java集合框架,包括ArrayList、LinkedList、HashSet、HashMap等基本集合类的使用,以及List、Set、Map接口的特性。此外,还可能涉及泛型的概念,泛型(14泛型.md)提高了代码的...
4. 集合框架:Java集合框架是用于存储和操作对象的工具,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)、Map(如HashMap和TreeMap)等接口及其实现类。它们提供了丰富的API用于添加、删除、查找...
- **容器类**:如ArrayList、LinkedList、HashSet、HashMap等,它们提供了存储和操作对象的不同方式。 - **接口与实现**:List、Set、Map接口,以及对应的实现类,理解它们的特点和应用场景。 - **迭代器**:用于...
- ArrayList、LinkedList、HashSet、HashMap:研究这些常用集合类的实现原理,掌握它们的添加、删除、查找操作,以及适用场景。 - 集合接口与泛型:了解List、Set、Map接口,以及泛型在集合中的应用,提高代码的...
Java学习笔记是一个全面涵盖Java编程语言的资源集合,旨在帮助初学者和有经验的开发者深入理解和掌握Java核心技术。这个压缩包文件"java-learn-note-master"可能包含一系列的笔记、代码示例、教程和项目实践,是学习...
### Java学习笔记知识点总结 #### 一、JVM与内存管理 **1.1 JVM基本概念** - **JVM(Java Virtual Machine)**: Java虚拟机是执行Java字节码的虚拟机,它提供了运行Java程序所需的环境。 **1.2 线程** - **线程...
- **具体实现类**:ArrayList、LinkedList、HashSet、HashMap等,了解它们的特点和适用场景。 - **泛型**:用于指定容器存储元素的类型,提高代码安全性。 5. **多线程** - **线程创建**:通过实现Runnable接口...
- ArrayList、LinkedList、HashSet、HashMap等实现类的特性与选择。 - 泛型:用于限制集合元素的类型,提高代码安全性和可读性。 9. **IO流**: - 流的概念:输入/输出流,用于读写数据。 - 文件操作:File类...
5. **集合框架**:ArrayList,LinkedList,HashMap,HashSet等容器的使用,以及它们之间的区别和选择。此外,接口如List,Set,Map的使用和实现也会涉及。 6. **输入输出(I/O)**:包括System.in, System.out....
在Java学习笔记中,我们重点关注Java的IO(输入/输出)操作、常用类库以及集合框架。 1. **Java IO**: - **File类**:提供了文件和目录的基本操作,如创建、删除、重命名等。 - **RandomAccessFile**:支持对...
3. **集合框架**:Java集合框架包括List、Set、Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。它们用于存储和操作对象,是处理数据的重要工具。 4. **异常处理**:Java中的异常处理机制允许...
这篇学习笔记将深入探讨Java集合框架的基础概念、主要类库以及常见应用场景。 首先,Java集合框架分为两种基本类型:List(列表)和Set(集)。List接口代表有序的集合,允许重复元素,如ArrayList和LinkedList;而...
- 集合框架是Java中处理对象数组的一种方式,包括List、Set和Queue接口,以及ArrayList、LinkedList、HashSet、TreeSet、LinkedList等实现类。 - `ArrayList`提供了动态数组的功能,允许在任何位置插入和删除元素...
除了ArrayList,List接口还有其他实现,比如LinkedList,它基于链表结构,对于插入和删除操作具有更好的性能,但在随机访问元素时不如ArrayList快。选择使用哪种实现取决于具体的应用场景和性能需求。 总结起来,...