集合Collection

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值