汕头定制网站建设,hao123上网从这里开始作文,做网站 贴吧,电商专业学什么集合 集合List集合ArrayListLinkedList泛型SetTreeSet集合特点数据结构HashSet集合Map集合HashMapTreeMap可变参数创建不可变集合 集合
集合和数组的对比
数组的长度是不可变的#xff0c;集合的长度是可变的。数组可以存基本数据类型和引用数据类型。集合只能存引用数据类型… 集合 集合List集合ArrayListLinkedList泛型SetTreeSet集合特点数据结构HashSet集合Map集合HashMapTreeMap可变参数创建不可变集合 集合
集合和数组的对比
数组的长度是不可变的集合的长度是可变的。数组可以存基本数据类型和引用数据类型。集合只能存引用数据类型如果要存基本数据类型需要存对应的包装类。
Collection 集合
是单例集合的顶层接口它表示一组对象这些对象也称为Collection的元素JDK 不提供此接口的任何直接实现它提供更具体的子接口如Set和List实现 创建Collection集合的对象多态的方式具体的实现类ArrayList
Collection 集合常用方法
boolean add(E e) 添加元素
boolean remove(Object o) 从集合中移除指定的元素
boolean removeif(Object o) 根据条件进行删除
void clear() 清空集合
boolean contains(Object o) 判断集合中是否存在指定的元素
boolean isEmpty() 判断集合是否为空
int size() 集合的长度也就是集合中元素的个数Collection 集合的遍历 Iterator迭代器集合的专用遍历方式
Iterator iterator()返回集合中的迭代器对象该迭代器对象默认指向当前集合的0索引。
Iterator中的常用方法
boolean hasNext()判断当前位置是否有元素可以被取出E next()获取当前位置的元素将迭代器对象移向下一个索引位置
增强for循环简化数组和Collection集合的遍历
它是JDK5之后出现的其内部原理是一个Iterator迭代器实现Iterable接口的类才可以使用迭代器和增强for
增强for的格式
for(元素数据类型 变量名 : 数组或者Collection集合) {
//在此处使用变量即可该变量就是元素
}List集合
List集合概述
有序集合这里的有序指的是存取顺序用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素并搜索列表中的元素与Set集合不同列表通常允许重复的元素
List集合特点
有序存储和取出的元素顺序一致有索引可以通过索引操作元素可重复存储的元素可以重复
List集合特有方法
void add(int index,E element) 在此集合中的指定位置插入指定的元素
E remove(int index) 删除指定索引处的元素返回被删除的元素
E set(int index,E element) 修改指定索引处的元素返回被修改的元素
E get(int index) 返回指定索引处的元素数据结构
栈:先进后出队列:先进先出数组:查询快增删慢的模型链表:单向链表,双向链表
ArrayList
底层数据结构是数组查询快增删慢
ArrayList的构造方法和添加方法
public ArrayList()创建一个空的集合对象public boolean add(E e)将指定的元素追加到此集合的末尾public void add(int index,E element)在此集合中的指定位置插入指定的元素
ArrayList
可调整大小的数组实现
: 是一种特殊的数据类型泛型。在出现E的地方我们使用引用数据类型替换即可
3.ArrayList类常用方法
**成员方法 : **
public boolean remove(Object o)删除指定的元素返回删除是否成功public E remove(int index)删除指定索引处的元素返回被删除的元素public E set(int index,E element)修改指定索引处的元素返回被修改的元素public E get(int index)返回指定索引处的元素public int size()返回集合中的元素的个数
4.创建集合对象 ArrayList引用数据类型 对象名 new ArrayList引用数据类型();
LinkedList
底层数据结构是链表查询慢增删快
泛型
泛型是JDK5中引入的特性它提供了编译时类型安全检测机制 泛型可以使用的地方: 类后面-泛型类 方法申明上-泛型方法 接口后面-泛型接口
创建泛型类的对象时必须要给这个泛型确定具体的数据类型。
泛型的定义格式
类型指定一种类型的格式。 尖括号里面可以任意书写按照变量的定义规则即可。一般只写一个字母。 类型1,类型2…指定多种类型的格式多种类型之间用逗号隔开。比如E , T Q , M K , V
泛型类
格式修饰符 class 类名类型 { }范例public class Generic { } 此处T可以随便写为任意标识常见的如T、E、K、V等形式的参数常用于表示泛型
泛型方法
格式修饰符 类型 返回值类型 方法名(类型 变量名) { }范例public void show(T t) { }
泛型接口
格式修饰符 interface 接口名类型 { }范例public interface Generic { }
泛型接口的使用方式
实现类也不给泛型实现类确定具体的数据类型
类型通配符
类型通配符?ArrayList?表示元素类型未知的ArrayList它的元素可以匹配任何的类型但是并不能把元素添加到ArrayListList中了获取出来的也是父类类型类型通配符上限? extends 类型比如 ArrayListList ? extends Number它表示的类型是Number或者其子类型类型通配符下限? super 类型比如 ArrayListList ? super Number它表示的类型是Number或者其父类型
Set
Set集合特点
可以去除重复存取顺序不一致没有带索引的方法所以不能使用普通for循环遍历也不能通过索引来获取删除Set集合里面的元素
TreeSet集合特点
不包含重复元素的集合没有带索引的方法可以将元素按照规则进行排序
自然排序Comparable的使用
使用空参构造创建TreeSet集合自定义的Student类实现Comparable接口重写里面的compareTo方法
比较器排序Comparator的使用
TreeSet的带参构造方法使用的是比较器排序对元素进行排序的比较器排序就是让集合构造方法接收Comparator的实现类对象重写compare(T o1,T o2)方法重写方法时一定要注意排序规则必须按照要求的主要条件和次要条件来写
两种比较方式小结
自然排序自定义类实现Comparable接口重写compareTo方法根据返回值进行排序。比较器排序创建TreeSet对象的时候传递Comparator的实现类对象重写compare方法根据返回值进行排序。在使用的时候默认使用自然排序当自然排序不满足现在的需求时使用比较器排序
两种方式中关于返回值的规则
如果返回值为负数表示当前存入的元素是较小值存左边如果返回值为0表示当前存入的元素跟集合中元素重复了不存如果返回值为正数表示当前存入的元素是较大值存右边
数据结构
二叉树
二叉查找树又称二叉排序树或者二叉搜索树 特点
每一个节点上最多有两个子节点左子树上所有节点的值都小于根节点的值右子树上所有节点的值都大于根节点的值
平衡二叉树
二叉树左右两个子树的高度差不超过1任意节点的左右两个子树都是一颗平衡二叉树
旋转
左旋 逆时针旋转右子节点变成父节点根节点原先的根节点降级变成左子节点将多余的左子节点出让给降级的节点作为右子节 右旋 顺时针旋转左子节点变成父节点根节点原先的根节点降级变成右子节点将多余的右子节点出让给降级的节点作为左子节点 触发时机当添加一个节点之后该树不再是一颗平衡二叉树
红黑树
平衡二叉B树每一个节点可以是红或者黑红黑树不是高度平衡的它的平衡是通过“自己的红黑规则进行实现的
红黑规则
每一个节点或是红色的或者是黑色的。根节点必须是黑色如果一个节点没有子节点或者父节点则该节点相应的指针属性值为Nil这些Nil视为叶节点每个叶节点(Nil)是黑色的如果某一个节点是红色那么它的子节点必须是黑色(不能出现两个红色节点相连的情况)对每一个节点从该节点到其所有后代叶节点的简单路径上均包含相同数目的黑色节点
HashSet集合
底层数据结构是哈希表对集合的迭代顺序不作任何保证也就是说不保证存储和取出的元素顺序一致没有带索引的方法所以不能使用普通for循环遍历由于是Set集合所以元素唯一
哈希值
哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值 Object类中有一个方法可以获取对象的哈希值
public int hashCode()返回对象的哈希码值
对象的哈希值特点
同一个对象多次调用hashCode()方法返回的哈希值是相同的默认情况下不同对象的哈希值是不同的。而重写hashCode()方法可以实现让不同对象的哈希值相同
常见数据结构之哈希表
JDK8之前底层采用数组链表实现可以说是一个元素为链表的数组JDK8以后在长度比较长的时候底层实现了优化
HashSet1.7版本原理解析
创建一个默认长度16默认加载因为0.75的数组数组名table根据元素的哈希值跟数组的长度计算出应存入的位置判断当前位置是否为null如果是null直接存入如果位置不为null表示有元素则调用equals方法比较属性值如果一样则不存如果不一样则存入数组老元素挂在新元素下面当数组存满到16*0.7512时就自动扩容每次扩容原先的两倍
HashSet1.8版本原理解析
底层结构哈希表。数组、链表、红黑树的结合体。当挂在下面的元素过多那么不利于查询所以在JDK8以后当链表长度超过8的时候自动转换为红黑树。存储流程不变。
利用HashSet存储自定义元素必须重写hashCode和equals方法
Map集合
Interface MapK,V K键的数据类型V值的数据类型键不能重复值可以重复键和值是一一对应的每一个键只能找到自己对应的值键 值 这个整体 我们称之为“键值对”或者“键值对对象”在Java中叫做“Entry对象
Map集合的基本功能
V put(K key,V value) 添加元素
V remove(Object key) 根据键删除键值对元素
void clear() 移除所有的键值对元素
boolean containsKey(Object key) 判断集合是否包含指定的键
boolean containsValue(Object value) 判断集合是否包含指定的值
boolean isEmpty() 判断集合是否为空
int size() 集合的长度也就是集合中键值对的个数Map集合的获取功能
V get(Object key) 根据键获取值
SetK keySet() 获取所有键的集合
SetMap.EntryK,V entrySet() 获取所有键值对对象的集合
K getKey() 获得键
V getValue() 获得值HashMap
HashMap是Map里面的一个实现类。没有额外需要学习的特有方法直接使用Map里面的方法就可以了HashMap跟HashSet一样底层是哈希表结构的依赖hashCode方法和equals方法保证键的唯一如果键要存储的是自定义对象需要重写hashCode和equals方法
TreeMap
TreeMap是Map里面的一个实现类。没有额外需要学习的特有方法直接使用Map里面的方法就可以了TreeMap跟TreeSet一样底层是红黑树结构的依赖自然排序或者比较器排序对键进行排序如果键存储的是自定义对象需要实现Comparable接口或者在创建TreeMap对象时候给出比较器排序规则
可变参数
可变参数就是形参的个数是可以变化的
格式修饰符 返回值类型 方法名(数据类型… 变量名) { }范例public static int sum(int… a) { } 可变参数注意事项这里的变量其实是一个数组如果一个方法有多个参数包含可变参数可变参数要放在最后
创建不可变集合
static E ListE of(E…elements) 创建一个具有指定元素的List集合对象
static E SetE of(E…elements) 创建一个具有指定元素的Set集合对象
static K , V MapKV of(E…elements) 创建一个具有指定元素的Map集合对象在List、Set、Map接口中都存在of方法可以创建一个不可变的集合。这个集合不能添加不能删除不能修改。但是可以结合集合的带参构造实现集合的批量添加。在Map接口中还有一个ofEntries方法可以提高代码的阅读性。首先会把键值对封装成一个Entry对象再把这个Entry对象添加到集合当中。