【Collection 集合 、Collections 工具类】

 

 

【List接口】

 

  • List 接口的方法

void add(int index,E element)添加元素到指定的位置index
boolean addAll(int index,Collection<? extends E> c)把c所有元素添加到指定index中
E remove(int index)删除并返回index索引处的元素
E get(int index)返回集合index处的元素
int indexOf(Object o)返回o第一次出现的位置
int lastIndexOf(Object o)返回o最后一次出现的位置
E set(int index,E element)将index处的元素替换成e,返回旧元素
List subList(int from,int to)截取从from到to的列表,左包含右不包含

 

  • ArrayList

1.基于数组实现 

2.长度可变的 

3.分配连续内存空间

 

特点:

1.线程异步   2.线程不安全   3.效率高

 

  • Vector(向量)

1.动态数组

2.长度可以增加

 

特点:

1.线程同步的    2.多线程安全的    3.效率低

 

Vector 和 ArrayList 实现了同一接口 List,但Vector 的方法都具有 synchronized 关键修饰。但对于复合操作,Vector 仍然需要进行同步处理。

 

  • 迭代器接口(Iterator)

是一种使用迭代法遍历集合的对象。

boolean  hasNext()判断是否还有其他元素
Object  next()获取下一个元素
void  remove()删除最后一次调用next返回的元素

例如:

ArrayList list = new ArrayList<String>();
Iterator<String> it=list.iterator();
while(it.hasNext()){
	if(it.next()=="AA"){
		it.remove();
	}else
		System.out.println(it.next());
}

另外:List允许双向遍历列表,即还可以实现前向遍历

hasprevious();
previous();

 

  • Stack

先进后出

 

  • Queue

只允许在表的前端进行删除操作,而在表的后端进行插入操作的线性表

 

ArrayList是基于数组结构的集合,遍历和随机访问元素的效率比较高

LinkedList采用链表存储方式,插入、删除元素效率比较高

 

  • LinkedList

是基于链表的、实现了List接口和Queue接口的集合

addFirst()从集合列表开头插入元素
addLast()从集合列表结尾插入元素(add)
getFirst()拿到第一个元素并返回
getLast()拿到最后一个元素并返回
removeFirst()移除第一个元素并返回
removeLast()移除最后一个元素并返回

 

  • List 集合使用技巧

要求快速访问元素,则使用ArrayList 集合。

要求快速插入和删除元素,则使用LinkedList集合。

当对多线程元素操作时,则使用Vector集合。

要求数据先进后出时,则使用Stack集合类。

 

---------------------------------------------------------------------------------------------------------------------------------------

【Set 接口】

是用于存储无序的、不重复的数据,且不能通过索引访问元素

 boolean  add(E e)如果此set集合尚未存在指定的元素,则添加此元素
 boolean   addAll(Collection<? extends E> c)将参数集合中所有元素添加到此set集合的尾部
boolean    remove(Object obj)将指定参数对象移出集合
void   clear()移出set集合中所有元素
Iterator  iterator()返回此set中的元素上进行迭代的迭代器
int  size()返回此set集合中所有的元素数
boolean   isEmpty()如果set不包含元素,则返回set

 

  • HashSet

是基于哈希表的Set集合

 

  • LinkedHashSet

是基于双向链表和哈希表、继承自HashSet的Set集合

 

  • TreeSet

是基于红黑树、实现了Set接口,具有排序功能的Set集合。

 

  • Comparable接口

使实现类自身具备某种比较规则以便对其对象进行 自然排序的接口。

是要求自定义类实现Comparable接口并实现其compareTo(Object   obj)方法,在此方法中指定排序规则的算法。

例如:

public class Student implements Comparable {

	public int compareTo(Student o) {
		return this.age - o.age;
	}
}

 

  • Comparator比较器

是要求自定义类实现Compartor接口并重写其compare(Object arg0, Object arg1)方法,在此方法中依据 XX 属性进行排序的算法。也称比较器排序。

例如:

public class MyComparator implements Comparator{
		public int compare(Object arg0, Object arg1) {
			Student o1=(Student)arg0;
			Student o2=(Student)arg1;
			if(o1.getAge() == o2.getAge())
		            return o1.getName().compareTo(o2.getName());				
                        return o1.getAge() - o2.getAge();
		}
}

区别:

Comparable接口: 实现该接口的类具有排序功能 需要实现compareTo方法,使用当前对象和参数对象进行比较 Comparator接口: 不会对集合中存储元素的类进行修改 需要自定义比较器类实现该接口,实现compare方法,比较两个参数对象 需要将比较器对象以参数的形式传入集合的构造器中    

 

---------------------------------------------------------------------------------------------------------------------------------------

 

 

  • addAll 、shuffle

        ArrayList<int> list = new ArrayList<>();
        list.add(1);  
        list.add(2);
        list.add(3);

        Collections.addAll(list,4,5,6);

        Collections.shuffle(list);
        

 

  • sort

sort()默认是升序排序,如果是 obj 对象的集合,则要自己在obj类中重写compareTo()

public int compareTo(obj o){
    return this.getNum() > o.getNum() ;
}

或者,用第二个sort()

Collections.sort(list,new comparator<obj>(){
		@Override
		public int compare(obj o1,obj o2){
			return o1.getNum() > o2.getNum();
		}
});

 

注意:集合(容器)的类型不会因为负载类型具有父子关系,而变得具有父子关系。

例如:ArrayList是Object的子类,但下面的语句不会被编译

List<Object> list = new ArrayList<String>;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值