集合
集合简述
衰小孩、519
这个作者很懒,什么都没留下…
展开
-
集合的简述
定义可以动态保存任意多个对象,使用比较方便提供了一系列方便的操作对象的方法:add,remove,set,get使用集合添加、删除新元素的示意代码更简洁框架体系原创 2021-09-08 13:51:12 · 76 阅读 · 0 评论 -
Collections工具类
Collections的方法Collections是一个操作Set、List和Map等集合的工具类Collections中提供了一系列静态的方法对集合元素进行了排序、查询和修改等操作排序操作(均为static方法)reverse(List):反转List中元素的顺序shuffle(List):对List集合元素进行随机排序sort(List):根据自然顺序对List集合元素进行升序排序sort(List,Comparator):根据指定的Comparator产生的顺序对List集合进行排原创 2021-09-14 16:04:20 · 70 阅读 · 0 评论 -
Collection接口遍历元素的方式
使用Iterator迭代器使用Iterator迭代器需要一个Iterator对象,主要用于遍历Collection集合中的元素所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个·实现了Iterator接口的对象,即可以返回一个迭代器Iterator仅用于遍历集合,本身并不存放对象Iterator接口的方法:hasNext();、next();package aggregate.collectClass;import java.util.ArrayLis原创 2021-09-08 14:27:34 · 178 阅读 · 0 评论 -
Collection接口和常用方法
特点Collection实现子类可以存放多个元素,每个元素属于Object类有些Collection的实现类,可以存放重复的元素,有些不可以有些Collection的实现类,有些是有序(List),有些不是有序(Set)Collection接口没有直接的实现子类,是通过它的子接口Set和List来实现的常用方法添加 add();删除 remove();是否包含参数 contains();获取元素个数 size();判断是否为空 isEmpty();清空 clear();添加多个原创 2021-09-08 14:10:03 · 158 阅读 · 0 评论 -
List接口的使用方法
特点List集合类中元素有序,即添加顺序和取出顺序一致,且可重复List集合中的每个元素都有其对应的顺序索引,即支持索引List容器中的元素都对应一个整数型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素方法void add(int index, Object ele):在index位置插入ele元素boolean addAll(int index, Collection eles):从index位置开始,将eles中的所有元素添加进来Object get(int index)原创 2021-09-08 16:21:29 · 668 阅读 · 0 评论 -
List遍历集合的三种方式
使用Iterator迭代器使用增强for循环使用普通for循环原创 2021-09-08 16:31:58 · 63 阅读 · 0 评论 -
Vector底层结构和源码分析
基本原理Vector底层也是一个对象数组:protected Object[] elementVector是线程同步的,即线程安全,Vector类的操作方法带有synchronized在开发中,需要线程同步安全时,考虑使用Vector原创 2021-09-09 11:00:59 · 93 阅读 · 0 评论 -
ArrayList底层结构和源码分析
结论ArrayList中维护了一个Object类型的数组elementData当创建ArrayList对象时,如果使用的是无参构造器,则初始elementData容量为0,第一次添加,则扩容elementData容量为10,如需要再次扩容,则扩容elementData容量为原容量1.5倍如果使用的是指定大小的构造器,则初始elementData容量为指定大小,如果需要扩容,则直接扩容为原容量1.5倍//transient 表示瞬间的、短暂的,若用transient修饰属性,则表示该属性不会被序原创 2021-09-08 21:19:39 · 60 阅读 · 0 评论 -
LinkedList底层结构与源码分析
基本说明LinkedList底层实现了双向链表和双端队列特点可以添加任意元素(元素可以重复),包括null线程不安全,没有实现同步基本操作机制LinkedList底层维护了一个双向链表LinkedList中维护了两个属性first和last,分别指向首节点和尾节点每个节点(Node对象)里面又维护了prev、next、item三个属性,通过prev指向前一个,通过next指向后一个节点,最终实现双向链表所以LinkedList的元素的添加不是通过数组实现的,相对来说效率较高pack原创 2021-09-09 19:37:49 · 64 阅读 · 0 评论 -
Set接口和常用方法
特点无序(添加和取出顺序不一致),没有索引取出顺序固定不允许重复元素,所以最多包含一个null因为Set也是Collection子接口,因此常用方法和Collection接口一样遍历方式使用Iterator迭代器使用增强for不能使用索引来获取,即不能使用普通for循环遍历package aggregate.setClass;import java.util.HashSet;import java.util.Iterator;import java.util.Set;p原创 2021-09-09 20:38:33 · 140 阅读 · 0 评论 -
HashSet和TreeSet的去重机制
HashSet:hashCode()+equals(),底层先通过存入对象,进行运算得到一个hash值,通过hash值得到一个对应的索引,如果在table中索引的位置没有数据,则直接添加数据,如果有数据,则遍历索引那条链表进行equals比较,不同则添加TreeSet:如果传入了Comparator匿名对象,就使用实现的compare去重,如果方法返回0,就认为是相同元素,不添加。如果没有传入Comparator匿名对象,则以添加对象实现的Comparable接口的compareTo去重packag.原创 2021-09-14 21:13:22 · 117 阅读 · 0 评论 -
HashSet的扩容过程
扩容过程因为所有A类元素hashcode值相同,所以会被加入同一个链表再加入8个元素之后,再加入第九个元素,table表会扩容为原来两倍,即32再加入第九个元素,继续扩容,为64再加入第10个元素时,因为此时的table表已经满足了容量>=64,且单条链表元素>=8,所以会进行树化,将table表化为红黑树package aggregate.setClass;import java.util.HashSet;public class HashSetIncrement {原创 2021-09-10 20:20:03 · 1007 阅读 · 0 评论 -
Set的子类HashSet的全面说明
特点HashSet实现了Set接口HashSet实际上是HashMap可以存放null值,但是只能有一个null值HashSet不保证存放元素顺序和取出顺序一致不能有重复元素HashSet底层机制底层是HashMap,HashMap底层是(数组+链表+红黑树)添加一个元素时,先得到hash值,然后把它转成索引值然后找到存储数据表table,看这个索引位置是否已经存放元素如果没有,直接加入如果有,调用equals方法对准备加入元素和已有元素进行比较,如果相同,则放弃添加,如果不相同原创 2021-09-10 19:33:18 · 105 阅读 · 0 评论 -
HashSet的子类LinkedHashSet的机制
特征LinkedHashSet是HashSet的子类底层是一个LinkedHashMap,底层维护了一个数组+单向链表+双向链表LinkedHashSet根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序,这使得元素看起来是有序的LinkedHashSet不允许添加重复元素底层机制LinkedHashSet添加元素顺序和取出元素顺序一致LinkedHashSet底层维护的是一个LinkedHashMap(是HashMap的子类)LinkedHashSet底层结原创 2021-09-11 15:48:22 · 168 阅读 · 0 评论 -
TreeSet源码解读
TreeSetadd方法中的数据比较会调用compare方法,利用TreeSet提供的一个构造器可以传入一个比较器,重写排序方法,定义数据的排序方式package aggregate.setClass;import java.util.Comparator;import java.util.TreeSet;public class TreeSet_ { public static void main(String[] args) { TreeSet treeSet原创 2021-09-13 21:18:26 · 126 阅读 · 0 评论 -
Map接口和常用方法
特点(JDK8)Map与Collection并列存在,用于保存具有映射关系的数据key——valueMap中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中Map中的key不可以重复Map中的value可以重复Map中的key和value都可以为null常用String类作为Map的keykey和value之间存在单向一对一关系,即通过指定的key总能找到对应的value当具有相同的key,后一个会替换前一个package aggregate.map原创 2021-09-11 17:36:07 · 59 阅读 · 0 评论 -
Map接口的遍历方式
方式一、 先取出key,通过key取value二、 直接取value值三、 通过EntrySet取k-v方法迭代器增强forpackage aggregate.map;import java.util.*;public class MapFor { public static void main(String[] args) { Map map = new HashMap(); map.put("1","tom"); map原创 2021-09-12 11:34:02 · 61 阅读 · 0 评论 -
Map的子类HashMap的数据结构
添加数据原理HashMap底层是(数组+链表+红黑树)添加一个元素时,先得到hash值,然后把它转成索引值然后找到存储数据表table,看这个索引位置是否已经存放元素如果没有,直接加入如果有,调用equals方法对准备加入元素和已有元素进行比较,如果相同,则放弃添加,如果不相同,则添加至最后在Java8中,如果一条链表的元素个数达到TREEIFY_THRESHOLD(默认为8),并且table的大小>=MIN_TREEIFY_CAPACITY(默认64),就会进行树化数据结构ta原创 2021-09-11 21:32:48 · 89 阅读 · 0 评论 -
TreeMap底层机制
package aggregate.map;import java.util.Comparator;import java.util.TreeMap;public class TreeMap_ { public static void main(String[] args) { TreeMap treeMap = new TreeMap(new Comparator() { @Override public int compa原创 2021-09-14 09:46:19 · 131 阅读 · 0 评论 -
Map的子类Hashtable的基本介绍
特点存放的元素是键值对:k-vHashtable的key和value都不能为空Hashtable使用方法基本上和HashMap一样Hashtable是线程安全的,HashMap是线程不安全的结构底层有数组Hashtable$Entry[ ],初始化大小为11临界值threshold 8 = 11 * 0.75扩容方式当if (count >= threshold) 满足时,按照 int newCapacity = (oldCapacity << 1) + 1; 进原创 2021-09-13 18:36:02 · 88 阅读 · 0 评论 -
Hashtable的子类Properties
特点Properties类继承自Hashtable类,并且实现了Map接口,也是使用一种键值对的形式来保存数据使用特点和Hashtable类似Properties还可以用于从xxx.properties文件中加载数据到Properties类对象,并进行读取和修改xxx.properties文件通常作为配置文件方法package aggregate.map;import java.util.Properties;public class Properties_ { public原创 2021-09-13 19:05:54 · 135 阅读 · 0 评论 -
集合专题总结
集合存在意义数组存储数据有缺陷,所以使用集合来存储数据数组缺陷:数组长度开始必须指定,一旦指定不能更改保存的元素类型必须一致使用数组进行增删操作比较麻烦集合优势可以动态保存多个对象,使用比较方便提供了一系列方便操作对象的方法:add、remove、set、get等使用集合增删元素更简洁框架体系Collection接口的常用方法及遍历方式一、List接口ArrayList、Vector以及LinkedList的常用方法及遍历方式List集合类中元素有序,即添加原创 2021-09-15 12:26:59 · 66 阅读 · 0 评论