与Java中的数组相比,它的容量能动态增长。 // 若ArrayList的容量不足以容纳当前的全部元素,设置 新的容量=“(原始容量x3)/2 + 1” public void ensureCapacity(int minCapacity) for (int i = 0; i < size; i++) elementData[i] = null; size = 0; } // 将集合 = 0; } // 从index位置开始,将集合c添加到ArrayList public boolean addAll(int index, Collection<? (02) 当ArrayList容量不足以容纳全部元素时,ArrayList会重新设置容量:新的容量=“(原始容量x3)/2 + 1”。
该集合理论上只要内存可以存放数据,就可以一直添加,是无限扩容的。 LinkedList有3个主要属性size、first、last。 添加 ? 添加与删除的操作逻辑基本相同,不再赘述。
TreeSet(红黑树) 基于排列 顺序实现,元素不重复 实现了SortedSet接口,对集合元素自动排序。 元素对象的类型必须实现Comparable接口,指定排序规则。 TreeSet使用案例 使用TreeSet集合实现字符串按照长度进行排序。 注意,是先比较长度,如果长度一样,就比较n2用他们自己的方法compareTo。
使用迭代器: Iterator<String> it = hashSet.iterator(); while(it.hashNext()) { xxx } hashset使用2 注意最后一个p3是不能加进去的
0x00 概述 本篇主要涉及Java知识点有Map集合,Collections集合工具类和一个斗地主的案例。 键不能重复,值可以重复 元素存取无序 Map集合的基本使用 package MapDemo1; import java.util.HashMap; import java.util.Map MapDemo3; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set 创建HashMap集合对象 3. 创建学生对象 4. 把学生添加到集合 5. MapTest3; import java.util.ArrayList; import java.util.HashMap; import java.util.Set; public class
Java集合03 ArrayList简析 在前面的集合框架那一章中,简单总结了Java集合的架构,List是Collection下的一大分支,而ArrayList又是List中最为常用的。 与Java中的数组相比,它的容量能动态增长。 ArrayList 是一个数组队列,继承了AbstractList,实现了List,提供了元素添加、删除、修改、遍历等功能。 ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。 public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 7, 5, 3, 8, 2); // 5, 7, 8] 自定义排序:[8, 7, 5, 3, 2, 1] 2.3 ArrayList删除元素 现在有 [a,a,b,c,e,a,d] 这么一个ArrayList集合,删除该集合中的所有的"a
不仅 Java,其他语言也有一些集合框架,比如 C艹 的 STL(标准模板库),Smalltalk 的集合层次结构。不同于他们陡峭的学习曲线,Java 集合框架设计的更加合理,学习起来更加轻松。 使用集合框架有什么好处呢? 使用 Java 集合框架能有以下几点好处: 编码更轻松:Java 集合框架为我们提供了方便使用的数据结构和算法,让我们不用从头造轮子,直接操心上层业务就好了。 Java 集合框架主要结构图 ? 如上图所示,Java 的集合主要按两种接口分类:Collection, Map. Iterator 迭代器 在Java 集合解析:Iterator 和 Java 集合解析:ListIterator 我介绍了 Collection 的迭代器 Iterator 以及用于 List 的迭代器 url=1L6YSAULAhjLH4ZYfO0yCbKlvo8DJeQMtCmCLKYpENStbpxNDiFCwaJf4iZaNDr7cho37GctXOddek3LhrO3_K 这里看到的一幅生动形象图
二、Collections源码之大类方法 1.提供不可变集合 2、提供同步的集合 3、类型检查 4.提供空集合或者迭代器 5.提供singleton的集合或者迭代器 三、从源码看其他常用方法 1. (这里描述的多态算法是Java平台提供的可重用功能的一部分。它们都来自Collections类,都采用静态方法的形式,其第一个参数是要执行操作的集合。 Java平台提供的绝大多数算法都对列表实例进行操作,但也有少数算法对任意集合实例进行操作。) 至此,以上的同步内部类都有方法与之对应,也就是传进来集合就行了,会给我们返回一个同步类,可以直接获取,这也太方便了吧没听过鲁迅说便宜的东西往往最贵么(鲁迅说没有说过),也就是效率自己权衡好就行啦~ 3 4.提供空集合或者迭代器 这个类还提供了一些方法可以获取到空集合,会生成指定类型的空List,Set,Map,而且是不可变的,如进行 add()操作会报java.lang.UnsupportedOperationException
3、案例 3.1 Iterator遍历集合 import java.util.Collection; //导包 import java.util.HashSet; import java.util.Iterator (与上同理) 3)Iterator 提供了两个方法来迭代访问 Collection 集合里的元素,Collection 集合里的元素不能被改变,只有通过 Iterator 的 remove() 方法删除上一次 $KeyIterator.next(HashMap.java:1533) at test3.IteratorTest.main(IteratorTest.java:15) 4、Iterator错误检查机制 3、泛型集合 示例:结合泛型与集合编写一个案例实现图书信息输出 1)创建一个Book类(图书编号、图书名称、价格) public class Book { // 定义Book类 (完整javabean ,然后向集合中添加图书元素,最后输出集合中的内容 import java.util.ArrayList; //导包 import java.util.HashMap; import java.util.List
集合便应运而生了。 二、集合是什么? Java集合类存放在java.util包中,是一个用来存放对象的容器。 注意: 1.集合只能存放对象。 比如你存入一个int型数据66放入集合中,其实它是自动转换成Integer类后存入的,Java中每一种基本数据类型都有对应的引用类型。 2.集合存放的都是对象的引用,而非对象本身。 所以我们称集合中的对象就是集合中对象的引用。对象本身还是放在堆内存中。 3.集合可以存放不同类型,不限数量的数据类型。 三、Java集合框架 首先,我们来看一张图 发现一个特点,上述所有的集合类,除了map系列的集合,即左边的集合都实现了Iterator接口。 3.List被AbstractList实现,然后分为3个子类,ArrayList,LinkList和VectorList。
iterable接口 整个接口框架关系如下(来自百度百科): [b3fb43166d224f4a5cebf37901f790529822d16e.jpg] iterable接口其实是java集合大家庭的最顶级的接口之一了 Iterable接口出现在JDK1.5,那个时候只有iterator()方法,主要是定义了迭代集合内元素的规范。 内部定义的方法 java集合最源头的接口,实现这个接口的作用主要是集合对象可以通过迭代器去遍历每一个元素。 以发挥多核时代的处理器性能,java默认在集合框架中提供了一个默认的Spliterator实现,底层也就是Stream.isParallel()实现的,我们可以看一下源码: // stream使用的就是 iterable接口,从字面意义来说,就是可以迭代的意思,可以理解为实现这个接口的集合类获得了迭代遍历的能力,同时它也是集合的顶级接口,Collection接口继承了它。
3.如何向哈希表中添加元素? 先调用存储的key的hashCode方法,经过 某个算法得到hash值,如果这个哈希表中不存在这个hash值,则直接加入元素。 但是TreeSet集合的存储是有序的,即:存储到集合中的元素是按自然顺序存储的。 判断元素唯一性的方式: 根据比较方法的返回值来判断。是0(零)就存入集合,不是0就不存。 那么就按照元素的自然顺序排序存储. 2.往TreSet里面添加元素时候,如果元素不具备自然顺序特性,那么该元素就必须要实现Comparable接口,把元素的比较规则定义在compareTo(T o)方法中 3. Java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现了该接口的对象就可以比较大小。 add()方法内部会自动调用Comparator接口中的compare()方法排序 调用的对象是compare方法的第一个参数,集合中的对象是compare方法的第二个参数 (3)两种方式的区别 TreeSet
List集合 List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。 List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。 java.util.vector提供了向量类(Vector)以实现类似动态数组的功能。 程序中定义Enumeration类的一个对象Enumeration是java.util中的一个接口类, (3)public final synchronized Enumeration elements java.util包中的其他类中也都有这类方法,以便于用户获取对应的枚举类型。 在Enumeration中封装了有关枚举数据集合的方法。 3、 增长数量,Vector以1.5倍增长,ArrayList以2倍增长。
注意:Map中的集合不能包含重复的键,值可以重复。每个键只能对应一个值。 Map集合是键值对形式存储值的,所以遍历Map集合无非就是获取键和值,根据实际需求,进行获取键和值。 Set<Map, Entry<K, V>> entrySet(); //即将Map集合转化为Set集合。 } 三、具体实现 接口java.util.Map,包括3个实现类:HashMap、Hashtable、TreeMap。 (即先找到丈夫,再去找妻子) keySet的演示图解 (二)entrySet 先获取map中的键值关系封装成一个个的entry对象, 存储到一个Set集合中,再迭代这个Set集合, 根据entry获取对应的 可以对Map集合中的键进行排序。 五、HashMap
Java 集合框架01-----Java集合总览 大家好,我是架构君,一个会写代码吟诗的架构师。 今天说一说Java 集合框架01-----Java集合总览,希望能够帮助大家进步!!! 今天开始阅读Java集合源码了。 Collection 主要有List,Set和Queue三个分支,Collection定义了集合的基本操作,如集合的查找,修改,合并 - List是一个有序队列,允许重复元素,其实现类ArrayList 3. Iterator是集合的遍历工具,即我们通常所说的Iterator迭代器。Collection依赖于Iterator,所有Collection的所有实现类都要依赖Iterator。 4. Arrays和Collection是操作数组和集合的工具类。
1.Collection的定义如下: public interface Collection<E> extends Iterable<E> {} 它是一个接口,是高度抽象出来的集合,它包含了集合的基本操作 set(int location, E object) abstract List<E> subList(int start, int end) 3. Set是没有重复元素的集合。 集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口,包括:是否存在下一个元素、获取下一个元素、删除当前元素。 即,当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast
不过不管怎么叫它,它的功能不会遍,我们经常会用它作为动态管理数组元素的集合类。 我们先来看一下它的类继承图: ? c 中的所有元素按照集合 c 迭代器遍历顺序插入到当前 List 从 index 下标开始的位置, * 如果下标 index 越界,抛出 IndexOutOfBoundsException 异常 答案是肯定的,要不然 Java 没必要设计两个功能相同的类来添加开发者的负担,我们先看看 Vector 类的构造方法: /** * 创建一个初始容量为 initialCapacity ,每次扩容量为 我们可以看到,类中的一些关键方法用 synchronized 关键字修饰,关于 synchronized 关键字在本专栏前一个系列中的同步的文章中已经说过了,有兴趣的小伙伴可以看看:Java 多线程(4 下篇文章我们将继续探讨 Map 集合接口中的一些类和接口。 如果博客中有什么不正确的地方,还请多多指点。如果这篇文章对您有帮助,请不要吝啬您的赞,欢迎继续关注本专栏。 谢谢观看。。。
1.创建集合,并使用forEach和迭代器分别遍历 public class CollectionDemo { /* * 1.创建集合对象 * 2.创建添加集合元素 * 3.添加 * 4.遍历 */ public static void main(String[] args) { //1.创建集合对象 ArrayList(); //2.添加元素 array.add(""); array.add(15); array.add("java ,集合元素个数,集合化为Object数组(可以添加自定义对象) public static void main(String[] args) { //1.创建集合对象 ArrayList(); //2.添加元素 array.add(""); array.add(15); array.add("java
List集合 Java.utli.List接口 extends Collection接口 List接口的特点: 1、有序的集合,存储的元素和去除的元素顺序是一致的; 2、有索引,包含了一些带有索引的方法 ; 3、允许存储重复元素; List接口中带有索引的方法(特有) void add(int index, E element):在列表的指定位置插入指定元素。 String s = list.get(2);//返回列表中指定位置的元素 System.out.println(s); String remove = list.remove(3) ArrayList集合: 存储的结构是数组结构,元素增删慢,查询快 一般用于:查询数据,遍历数据 LinkedList集合: 数据存储的结构是链表结构,方便元素添加,删除 特点: 1、底层是链表 ; 2、里边包含了大量的首尾元素方法; 注意: 使用LinkedList集合特有方法,不能使用多态; 常用方法: void addFirst(E e):将指定元素插入此列表的开头
集合 集合就是Java中提供的一个容器,可以用来存储多个数据。 集合和数组的区别: 1、数据的长度固定的,集合的长度是可变的; 2、数组中存储的是同一类型的元素,可以存储基本数据类型,集合存储的都是对象; 学习集合的目标: 1、会使用集合存储数据; 2、会遍历集合, 把数据取出来; 3、掌握每种集合的特性; 集合框架学习方式: 1、学习顶层:学习顶层接口/抽象类中的共性方法,所有的子类都可以用; 2、使用底层:底层不是接口/抽象类,需要底层子类创建对象使用; 集合的结构图如下 : Java.util.Collection接口: 所有单列接口的最顶层接口,里面定义了所有单列结合共性的方法; 任意的单列集合都可以使用Collection接口中的方法; Collection接口中的方法 contains(Object obj):判断当前集合中是否包含给定的对象; boolean isEmpty():判断当前集合是否为空; int size():返回集合中元素的个数; Object[]