Collection接口
概述: 单列集合的根接口
该接口不会提供具体的实现,如果要创建之,使用多态
Collection常见方法定义
添加
boolean add(E e) | 将指定的元素添加到此列表的尾部 |
---|---|
boolean addAll(Collection<? extends E> c) | 将指定 collection 中的所有元素都添加到此 collection 中 |
删除
boolean remove(Object o) | 从此 collection 中移除指定元素的单个实例 |
---|---|
boolean removeAll(Collection<?> c) | 移除一组对象 |
void clear() | 移除此 collection 中的所有元素 |
遍历
Iterator< > iterator() | 为Iterator实例化。 |
---|---|
Object[ ] toArray() | 将集合转换成数组 |
迭代器遍历格式
Collection c = new ArrayList() ;
c.add(“ab”) ;
c.add(“cd”) ;
Iterator it = c. iterator() ;
while ( it.hasnext() ) {
Object obj = it.next() ;
System.out.printLn(obj) ;
}
foreach遍历
Collection c = new ArrayList() ;
c.add(“ab”) ;
c.add(“cd”) ;
for(Object obj : c ){
System.out.printLn( obj2) ;
}
结果:
ab
cd
判断
boolean contains(Object o) | 判断集合中是否包含某个元素o |
---|---|
boolean containsAll(Collection<?> c) | 如果此 collection 包含指定 collection 中的所有元素,则返回 true。 |
boolean isEmpty() | 如果此 collection 不包含元素,则返回 true。 |
其他
int size() | 获取集合的长度 |
---|---|
boolean retainAll(Collection<?> c) | 求交集(返回原集合不发生改变时为false) |
List接口
概述: 有序的 collection(也称为序列,有索引)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
List 接口常用方法(除从Collection继承的方法)
添加
void add(int index, E element) | 在列表的指定位置插入指定元素 |
---|---|
boolean addAll(int index, Collection<? extends E> c) | 将指定 collection 中的所有元素都插入到列表中的指定位置 |
删除
E remove(int index) | 移除列表中指定位置的元素 |
---|
修改
E set(int index, E element) | 用指定元素替换列表中指定位置的元素 |
---|
遍历
E get(int index) | |
---|---|
ListIterator listIterator() | 返回此列表元素的列表迭代器(按适当顺序) |
ListIterator listIterator(int index) | 返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始 |
获取
int indexOf(Object o) | 返回此列表中第一次出现的指定元素的索引; 如果此列表不包含该元素,则返回 -1。 |
---|---|
int lastIndexOf(Object o) | 返回此列表中最后出现的指定元素的索引; 如果列表不包含此元素,则返回 -1。 |
List subList(int fromIndex, int toIndex) | 返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。 |
ArrayList类(底层数据结构是数组)
ArrayList去重:
① 普通for循环,选择排序思想
注意重写equals方法;
for(int i=0;i<list.size()-1;i++){
for(int j=i+1;j<list.size();j++){
if(list.get[i].equals(list.get[j])){
list.remove(j);
j--;
}
}
}
② 创建新集合,遍历旧集合,判断新集合是否包含旧集合元素,如果没有就添加到新集合,循环结束后地址传递给就集合;
List newList=new ArrayList();
for(String s : list){
if(!newList.contains(s)){
newList.add(s);
}
}
list=newList;
ArrayList排序:
① 注意包装类型都有comparaTo方法;
② 当比较String为中文排序时,用
Collator c=Collator.getInstance(Local.CHINA);
int com=(…==0)?c.compare(stu1.getName(),stu2.getName()) : …;
③ sort默认从小到大排;
Collections.sort(list,new Comparator<Student>(){
@Override
public int compare(Student stu1,Student stu2){
int com1=stu1.getScore().compareTo(stu2.getScore());
int com2=(com1==0)?stu1.getAge().comparaTo(stu2.getAge()):com1;
return com2;
}
}) ;
for(Student s : list){
System.out.printLn(s);
}
Set接口
概述: 一个不包含重复元素的 collection,常见方法全部来自于 Collection(唯一、无序、可以存储null值,但是null值不能重复)
HashSet类( 底层数据结构是哈希表结构 )
数据存储到哈希表结构中是通过哈希值来存储的,哈希值和对象本身有关,并且和对象的hashCode方法返回值有关(类中重写hashCode()和equals()方法),是随机的,但同一对象hashCode()方法返回值一样,所以每次运行又是一样的
Set重写hashCode()和equals()方法去重
(当要添加进集合的对象为自定义类对象时)
TreeSet(底层数据结构是自平衡的二叉树)
使用比较器排序
(当要添加进集合的对象为自定义类对象时)
TreeSet<Student > set = new TreeSet<Student >(new Comparetor(){
@Override
public int compare(Student stu1,Student stu2){
int com1=stu1.getScore().compareTo(stu2.getScore());
int com2=(com1==0)?stu1.getAge().comparaTo(stu2.getAge()):com1;
return com2;
}
})
for(Student s : set){
System.out.printLn(s);
}
总结:
当需要去掉重复元素时,可以将ArrayList转成HashSet,Student类必须重写hashCode()和equals()方法
HashSet<Student > hs=new HashSet<Student >(list);
for(Student s : hs ){
system.out.printLn(s);
}
当需要排序时,可以将ArrayList转成TreeSet