Java 常用的三个集合类
讲集合collection之前,我们先分清三个概念:
colection集合,用来表示任何一种数据结构
Collection集合接口,指的是java.util.Collection接口,是SetListQueue 接口的超类接口
Collections 集合工具类,指的是 java.util.Collections 类。
我们这里说的集合指的是小写的collection,集合有4种基本形式,其中前三种的父接口是Collection
List 关注事物的索引列表
Set 关注事物的唯一性
Queue 关注事物被处理时的顺序
一、Collection 接口
Collection接口是 Set List Queue 接口的父接口,提供了多数集合常用的方法声明,包括 add()remove()contains() size() iterator() 等。
add(E e)
将指定对象添加到集合中
remove(Object o)
将指定的对象从集合中移除,移除成功返回true,不成功返回false
contains(Object o)
查看该集合中是否包含指定的对象,包含返回true,不包含返回flase
size()
返回集合中存放的对象的个数。返回值为int
clear()
移除该集合中的所有对象,清空该集合。
iterator()
返回一个包含所有对象的iterator对象,用来循环遍历
toArray()
返回一个包含所有对象的数组,类型是Object
toArray(T[] t)
返回一个包含所有对象的指定类型的数组
我们在这里只举一个把集合转成数组的例子,因为Collection本身是个接口所以,我们用它的实现类ArrayList做这个例子:
import java.util.ArrayList;
  import java.util.Collection;
 
  public class CollectionTest {
 
      public static void main(String[] args) {
 
          String a = "a",b="b",c="c";
          Collection list = new ArrayList();
          list.add(a);
          list.add(b);
          list.add(c);
 
          String[] array =  Array(new String[1]);
 
          for(String s : array){
              System.out.println(s);
          }
      }
  }
二、几个比较重要的接口和类简介
List 关心的是索引,与其他集合相比,List特有的就是和索引相关的一些方法:get(int index) add(int index,Object o) indexOf(Object o)
ArrayList 可以将它理解成一个可增长的数组,它提供快速迭代和快速随机访问的能力。
LinkedList 中的元素之间是双链接的,当需要快速插入和删除时LinkedList成为List中的不二选择。
Vector ArrayList的线程安全版本,性能比ArrayList要低,现在已经很少使用
2Set接口
Set关心唯一性,它不允许重复。
HashSet 当不希望集合中有重复值,并且不关心元素之间的顺序时可以使用此类。
LinkedHashset 当不希望集合中有重复值,并且希望按照元素的插入顺序进行迭代遍历时可采用此类。
TreeSet 当不希望集合中有重复值,并且希望按照元素的自然顺序进行排序时可以采用此类。(自然顺序意思是某种和插入顺序无关,而是和元素本身的内容和特质有关的排序方式,譬如“abc”排在“abd”前面。)
3Queue接口
Queue用于保存将要执行的任务列表。
LinkedList 同样实现了Queue接口,可以实现先进先出的队列。
PriorityQueue 用来创建自然排序的优先级队列。番外篇中有个例子android.yaohuiji/archives/3454你可以看一下。
4Map接口
Map关心的是唯一的标识符。他将唯一的键映射到某个元素。当然键和值都是对象。
HashMap 当需要键值对表示,又不关心顺序时可采用HashMap
Hashtable 注意Hashtable中的t是小写的,它是HashMap的线程安全版本,现在已经很少使用。
LinkedHashMap 当需要键值对,并且关心插入顺序时可采用它。
TreeMap 当需要键值对,并关心元素的自然排序时可采用它。
三、ArrayList的使用
ArrayList是一个可变长的数组实现,读取效率很高,是最常用的集合类型。
1ArrayList的创建
Java5版本之前我们使用:
List list = new ArrayList();
Java5版本之后,我们使用带泛型的写法:
List<String> list = new ArrayList<String>();
上面的代码定义了一个只允许保存字符串的列表,尖括号括住的类型就是参数类型,也成泛型。带泛型的写法给了我们一个类型安全的集合。关于泛型的知识可以参见这里。
2、ArrayList的使用:
List<String> list = new ArrayList<String>(); 
    list.add("nihao!"); 
    list.add("hi!"); 
    list.add("konikiwa!"); 
    list.add("hola"); 
    list.add("Bonjour"); 
    System.out.println(list.size()); 
    System.out.println(list.contains(21)); 
    System.out.println(list.remove("hi!")); 
    System.out.println(list.size());
关于List接口中的方法和ArrayList中的方法,大家可以看看JDK中的帮助。
3、基本数据类型的的自动装箱:
我们知道集合中存放的是对象,而不能是基本数据类型,在Java5之后可以使用自动装箱功能,更方便的导入基本数据类型。
List<Integer> list = new ArrayList<Integer>(); 
    list.add(new Integer(42)); 
    list.add(43);
4ArrayList的排序:
ArrayList本身不具备排序能力,但是我们可以使用Collections类的sort方法使其排序。我们
看一个例子:
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List;   
public class Test {       
  public static void main(String[] args) {         
    List<String> list = new ArrayList<String>();         
    list.add("nihao!");         
    list.add("hi!");         
    list.add("konikiwa!");         
    list.add("hola");         
    list.add("Bonjour");           
    System.out.println("排序前:"+ list);           
    Collections.sort(list);           
System.out.println("排序后:"+ list);     
  } 
}
编译并运行程序查看结果:
排序前:[nihao!, hi!, konikiwa!, hola, Bonjour]
排序后:[Bonjour, hi!, hola, konikiwa!, nihao!]
5、数组和List之间的转换
从数组转换成list,可以使用Arrays类的asList()方法:
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List;   
  public class Test {       
public static void main(String[] args) {               
  String[] sa = {"one","two","three","four"};             
  List list = Arrays.asList(sa);             
  System.out.println("list:"+list);             
  System.out.println("list.size()="+list.size());     
}   
}
6Iteratorfor-each
for-each出现之前,我们想遍历java arraylist用法ArrayList中的每个元素我们会使用Iterator接口:
import java.util.Arrays; 
import java.util.Iterator; 
import java.util.List;   
  public class Test {       

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。