数组与集合的区别:数组虽然也可以存储对象,但长度是固定的;集合的长度是可变的,数组中可以存储基本数据类型,集合只能存储对象。
集合特点:1、用于存储对象;
2、长度可变;
3、可存储不同对象;
一、Collection
ArrayList<Object> list=new ArrayList<Object>();
list.add("A");//添加对象A;
list.add(index,A);//在角标index位置上插入对象 A;
list.addAll( 集合); //在list里面加入集合;
list.clear();清除集合所有
boolean b=list.contain(a);返回指定角标的值(获取集合里的元素)
list.remove(a);删除角标为a的元素
list.is Empty;空集就返回true;
int index=list.indexOf(a);返回在集合里首次出现a的角标,没有就返回-1;
list.set(index,a);将指定元素a替代列表中角标为index的元素
list.size();集合里对象数
list.retainAll(list1);//取两个集合的交集,list里面只保留交集。
迭代器:
I terator it = list1.iterator();
system.out.println(it.next());// 返回一个元素,从第一个元素开始返回
while(it.hasNext()){//获取迭代器,取出集合里面的元素
System.out println(it.next)
}
反向迭代遍历集合里的元素:
while(it.hasprevious()){
System.out.println(it.previous);
}
Arraylist: 底层的数据结构使用的是数组
特点:查询速度快,删减慢;
linkList:
linkList:底层链表数据结构
特点:删减快,查询速度慢。
LinkedList link = new LinkedList();
addFirst();从前面开始添加
addlast();从后面开始添加元素
link.getFirst(); 获取第一个元素;如果没有元素会出现NoSuchElementException异常
link.getLast());获取最后一个元素
link.removeFirst()获取第一个元素并删除;如果没有元素会出现NoSuchElementException异常
link.removeLast();获取最后一个元素并删除
link.offerFirst()从前面开始添加
link.offerLast(); 从后面开始添加
获取元素,但不删除元素,如果集合中没有元素,会返回null
link.peekFirst();
link.peekLast();
获取元素,但是元素被删除,如果集合中没有元素,会返回null
link.pollFirst();
link.remove()//链表集合为空,抛出异常
link.poll()//链表集合为空,返回null;
collections.sort()按自然顺序排列
vector:
底层是数组数据结构。和ArrayList一样,区别:线程同步
枚举是vector特有的取出方式,不是通用的,已被取代;
Set接口:
Hashset:
是无序的,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法
TreeSet:
可以对Set集合里面进行排序; 底层数据是:二叉树,保证元素唯一行的依据。
public static void main(String[] args) {
TreeSet<String> tr = new TreeSet<String>();
tr.add("cba");
tr.add("abcd");
tr.add("aaa");
tr.add("bca");
tr.add("Aca");
Iterator<String> it = tr.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//输出:
// Aca
// aaa
// abcd
// bca
// cba
}
排序的方式:让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法。也称之为元素的自然顺序,或者也可以称之为默认顺序。
TreeSet集合的第二种比较方式
当元素自身不具备比较性时,或者具备的比较性不是所需要的,集合需要具备比较性。
public class MyCompare implements Comparator{