您的位置:首页 > 编程语言 > Java开发

Java中的集合功能整理

2016-05-01 22:02 323 查看
网上对集合的功能介绍有很多,也很详细。我在这里只能是对常用的几个集合类进行功能的简单梳理。小白一个。这里主要参考孙宇霞、王健编著的《Java编程从基础到应用》。内容仅供学习交流。

1.选择合适的集合类。

Set:是一个接口,无序集合,不能包含重复元素。同时身为接口不能生成对象。但是类HashSet和TreeSet实现了该接口,所以通常使用的也是这两个。

HashSet:该集合中主要存放的一些无序元素。如果你只是想用一个‘罐子’盛东西,其他什么都不关心,可以选它。

TreeSet:该集合除了实现Set接口还实现了SortedSet接口。也就是说可以用它来进行一些排序默认升序。当然排序的元素必须具有可比性。也就是说对于基本类型如:Float, Integer,String,Character等

List:接口,允许出现重复元素。与Set另一个不同的地方就是元素有序。如果你对加进‘罐子’里东西很在乎先后。如谁先进去的谁后进去的,第几个是谁比较关心可以选用。但是同样。List是个接口我们通常使用的是两个实现了该接口的两个类arrayLis和LinkedList。

ArrayList:支持对元素的快速访问。但是对插入和删除支持性差。

LinkedList: 对元素的插入和删除性能良好。由于List中元素有序,可以我们不用Iterator对象也可以访问,不过要先调用toArray()方法。才能像操作一个普通数组一样访问。

2.常用类的关系图。这是一个简单图。PS:我保证你能搜到更复杂的。



这里Collection.Set. List都是接口,知道这层实现关系,这三个接口中的方法,就可以被实现接口的类对象所调用。

3.

Collection中的方法:

boolean add()添加一个元素;boolean addAll( Collection c)添加集合c中所有元素。void clear():清空集合;boolean contain(object o):是否包含元素o。

int size():返回集合中元素个数;boolean isEmpty():是否为空; Object[] toArray():转变成包含此集合中所有元素的数组;boolean remove(object o):去除元素o; boolean removeAll(collection c)去除集合中c中所有元素;boolean retainAll(Collection c):仅保留c中所有元素 ;Iterator<E> iterator():返回一个Iterator对象,用于遍历集合元素。

HashSet:常用方法基本来源于Collection类,见上:

Set<Integer> iset=new HashSet<Integer>();
iset.add(Integer.valueOf(3));//这里用了一个封装类,也可以直接用一个基本数据类型
TreeSet:first():返回集合中第一个元素;last():返回集合中最后一个元素。poolFirst()返回集合中第一个元素然后移除。poolLast():返回最后一个元素然后移除。

SortedSet<E> subSet(E,F):返回一个新集合,从E到F,但不包含F。

SortedSet<E> headSet(E):返回一个包含E之前的元素,不包含E;SortedSet<E > tailSet(F)返回F之后元素,包含F。

public static void main(String[] args){
SortedSet<Integer> iset=new TreeSet<Integer>();
Scanner sc=new Scanner(System.in);
System.out.println("请输入整型:");
for(int i=0;i<4;i++){
System.out.println("请输入第"+(i+1)+"个数字");
int value=sc.nextInt();
iset.add(value);
}
Iterator<Integer> it=iset.iterator();
while(it.hasNext()){
System.out.println(it.next());
}

SortedSet<Integer> head_set=iset.headSet(60);
for(int j=0;j<head_set.size();j++){
System.out.println(head_set.toArray()[j]);
}
}


ArrayList:get(i):获取第i个元素。int indexOf(object o):返回第一次出现指定元素的下标,没有则是-1;lastIndexOf(object o):返回最后一次出现指定元素索引,没有则返回-1;

set(index, E,)修改指定索引处元素,并返回之前的元素。 List<E> subList(E,F)返回指定下标之间的元素,不包含后者。

public static void main(String[] args){
List<Integer> iset=new ArrayList<Integer>();
Scanner sc=new Scanner(System.in);
System.out.println("请输入整型:");
for(int i=0;i<4;i++){
System.out.println("请输入第"+(i+1)+"个数字");
int value=sc.nextInt();
iset.add(value);
}
Iterator<Integer> it=iset.iterator();
while(it.hasNext()){
System.out.println(it.next());
}

List<Integer> head_List=iset.subList(0, 2);
for(int j=0;j<head_List.size();j++){
System.out.println(head_List.get(j));//这里也可以转变成数组即调用方法toArray()[j]输出
}
}
LinekedList: addFirst(O)插入到集合开头;addLast(O):插入到集合尾部。removeFirst():移除第一个元素;removeLast():移除最后一个元素; getFirst():返回第一个元素;getLast():返回最后一个元素。

public static void main(String[] args){
LinkedList<Integer> iset=new LinkedList<Integer>();
Scanner sc=new Scanner(System.in);
System.out.println("请输入整型:");
for(int i=0;i<2;i++){
System.out.println("请输入第"+(i+1)+"个数字");
int value=sc.nextInt();
iset.add(value);
}
iset.addFirst(5);
for(int j=0;j<iset.size();j++){
System.out.println(iset.get(j));//虽然linkedList有序,但是要想像普通数组一样操作它。你还得调用toArray()方法。
}

}


写到这里大家应该有了一些浅显的认识。值得指出的是集合中存放的都是对象的引用值。这就是为什么前面的例子中会出现Integer.valueof():其实就是把基本数据类型转变成它的引用。不过现在JDK已经可以自动进行拆装箱功能,所以即使不写也没错。以上内容多为自己阅读后随写,不当之处敬请留言。相互学习,共同提高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: