集合类
· 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)
}
只能取出元素,而不能修改集合中的元素