JavaSE集合框架

it2024-02-21  85

集合类

· 1.5之前集合不能存储基本数据类型;1.5后集合也可以基本数据类型,基本数据类型可自动装箱 .集合中储存的是对象的引用,不是对象本身 · 每个容器对数据的存储方式都有不同。这个存储方式我们称为数据结构 · List中的对象是有序的,可以重复 · Set中的对象是无须的,不可以重复 · ArrayList底层使用的是数组结构,特点查询速度快,但是更改和删除速度较慢;线程不同步 · LinkedList底层是链表数据结构,特点查询速度慢,但是更改和删除速度快 · Vector底层使用的是数组结构,特点:和ArrayList功能相同,特点:增删查询都很慢;(Vector出现的时候还没有集合框架);线程同步;被ArrayList替代

· HashSet底层是hash表,hash表存放的是对象的hash地址值。如果两个对象的hashCode值相等,但是equals()等于false,两个对象都可以保存在HashSet中。 ·TreeSet底层是二叉树数据结构,可以排序

· HashTable底层是哈希表数据结构,不可以存入null键和null值;该集合是线程同步的 jdk1.0 · HashMap底层是哈希表数据结构,允许存入null键和null值;该集合是线程非同步的,可替换HashTable jdk2.0 · TreeMap底层是二叉树数据结构,线程不同步,可以对Map集合中的见进行排序 · set集合的底层就是使用了Map集合。

Collection共性方法

Iterator 迭代器

是一个接口

ArrayList al = new ArrayList(); al.add("sdsd"); al.add("sda"); Iterator it = al.iterator(); while(it.hasNext()){ soup(it.next()); } 优化的写法 for(Iterator it = al.iterator(); it.hasNext();){ soup(it.next()); }

打印集合

List中的共有方法

and(int index, E element) get(int index) indexOf(Object obj) lastIndexOf(Object obj) listIterator() listIterator(int index) remove(int index) set(int index, E element) subList(int fromIndex, int toIndex) · toArray(T[] a)集合转数组,是为了限制对集合的操作

listIterator()

iterator迭代list的过程中不可通过集合对象的方法操作元素,否则会报并发异常. listIterator() 是iterator()的子类,可执行如下操作

LinkedList

addFirst(E e) addLast(E e) offer() offerFirst() offerLast() clone() descendingIterator() element() peek() peekFirst() peekLast() getFirst() getLast() pop() remove() …

去除ArrayList中的重复对象

思路: List集合判断对象是否相同,用equals()方法;(其他集合不一样) ArrayList.contails()方法会自动调用对象的equals()方法

对象默认继承了Object的equals()方法,该equals()方法比较的是对象的地址值 重写equals()方法 list集合的remove()底层也调用了equals()方法。

List集合实现排序

HashSet没有排序,set如果要排序使用TreeSet List集合可以通过Collections.sort实现排序 Collections是一个工具类,sort是其中的静态方法,它有两种参数形式: 方法一: public static <T extends Comparable<? super T>> void sort(List list) { list.sort(null); } 对象实现Comparable接口中的comparaTo()方法;

方法2: public static void sort(List list, Comparator<? super T> c) { list.sort©; } Collections.sort(Object obj, Comparator cmp)

Set集合公共方法

和Collection的方法一致

HashSet

· 存自定义对象people,name和age相同是同一个对象; HashSet判断对象是否相同会先比较HashCode地址值,再比较equals(),所以需要重写hashCode()和equals()方法。 · hashSet判断和删除的依据:先比较hashCode()再比较equals() · hashSet线程非同步的

TreeSet

可以对set集合中的元素进行排序,

TreeSet排序方法1

默认按字母的自然顺序排序(String类默认已经实现了Comparable接口) TreeSet中存的对象要有比较性,否则会报类转换异常

TreeSet排序方法2

TreeSet中的对象需实现Comparable接口中的compareTo()方法,TreeSet会自动调到compareTo()方法 TreeSet判断对象是否相同调用compareTo()方法,保证元素唯一性 TreeSet底层是二叉树数据结构,默认从小到大取值

TreeSet排序方法3

当我们无法修改对象的比较性时,我们需要让集合自身具备比较性;给集合构造函数传入Comparator对象 compare:排序;equal:比较对象是否相同

Map集合

HashTable

HashMap

取出HashMap中的值

集合判断对象是否相同

List集合比较equals()方法,equals默认比较的是对象的地址 HashSet先比价hashcode值,再比较equals() TreeSet比较equals()方法

Collections

集合算法类 提供用来处理集合的大量静态方法(可以直接用Collections.静态方法()来使用),例如排序,乱序,反转,二分法查找等 一、static void Collections.sort(list) 排序 方法一: 自定义对象需手动实现比较行为,String默认实现了比较行为 方法二: static void Collections.max(list): 取list中的最大值 binarySearch() 二分搜索法搜索指定列表,获取指定元素的位置

Collections.copy()复制集合 Collections.file() 将集合中的元素全部替换为指定元素 Collections.replace() 替换list中的指定元素 static void Collections.reverse(list)反转 Collections.reverseOrder() 逆转 强行逆转现有比较器 Collections.SynList() 集合中的对象本身线程不安全

static void Collections.shuffle(list)乱序 static void Collections.swap(list,int,int)指定两点调换

Arrays类

对数组进行操作的算法类 Arrays.sort()排序 Arrays.asList()转换成集合,不可增减 如果数组中的元素都是对象,则转成集合时,数组中的元素就全部转成集合中的元素 如果数组中的元素是基本数据类型,则转成集合时会将该数组作为集合中的元素存在。 int[] 定义为Integer[] ,数组中的元素就全部转成集合中的元素

增强for循环

ArrayList<String> a = new ArrayList(); a.add("aaa"); a.add("bbb"); fo(String s : a){ soup(s) }

只能取出元素,而不能修改集合中的元素

最新回复(0)