Java集合学习心得

  集合是用来存放对象的容器,相对于数组而言它更加灵活,方便。我通常把集合理解为加强的数组结构,因为它可以完成数组的所有能完成的事,并且还提供了很多可以使用的方法。要想学习集合就必须了解集合的结构。

  

 

  所有的集合类都要继承Collection,它的两个直接子类,List和Set。这两个是接口不能直接创建对象,需要创建具体的子类对象。这两个子类的区别在于,List是有序,可重复的,而Set是无序,不可重复的。而List有两个重要的子类,一个是ArrayList和LinkedList。其中ArrayList是类似数组的存储结构,它的特点就是查询效率很高,但是添加删除元素效率很低。因为如果要改动某个地方,那么那个位置后面的元素都需要移动,所以效率低下。但是LinkedList就不一样。它是链表结构,对于链表结构来讲由于没有下标,所以查找效率低下,但是更改元素效率却很高。详情情况可参考数据结构里链表的增删。

  接下来请看实例(只列举了经常用到的List中ArrayList的实例,至于List中其它实现类可以参考这个例子自己查看下api)。

  

/**
* ArrayList集合实例
*/
public class Demo {
public static void main(String[] args) {
//List接口指向ArrayList的对象,这样声明的好处是
//以后声明其它子类所调用的方法都会生效,不需要再进行修改
List<String> arrList=new ArrayList<String>();

//添加元素
arrList.add("java");
arrList.add("c");
arrList.add("c++");
//删除元素
arrList.remove(0);//通过下标位置进行删除
arrList.remove("java");//通过元素进行删除,要注意传入的参数必须要和目标对象通过equals比较相同
//判断某个元素是否再集合里
boolean flag=arrList.contains("java");//如果有返回true,如果没有返回false
//取出某个元素的下标
int index=arrList.indexOf("java");

//集合的遍历,通过迭代器
Iterator<String> it=arrList.iterator();
while(it.hasNext()){
System.out.println(it.next());
}

/*
..........还有很多方法在此不一一赘述
*/

}

}

  Map是一种图形结构,它是通过键值对存储目标信息,也就是所它是按照key-value来进行存储的。key代表这个元素在Map里的位置,而value代表这个位置的值。而Map接口中最为常见的两个实现类就是HashMap和TreeMap。HashMap是通过数组和链表相结合的形式进行存储。对象通过相应的函数计算得到对应的哈希码,哈希码再通过对数组长度取余得到相应的值,这个值就是它存储的位置。整个数组也被叫做哈希表,同时如果出现不同的对象在同一位置的情况,则在同一位置通过链表进行存储相同位置的元素。过多的这类知识,不再赘述,如果想了解更多可以去学下数据结构。TreeMap是一种树形的存储结构,它是可以对元素排序的,排序的方式是通过对象实现或重写接口Comparable或Comparator。具体的实现可以参考下列例子

  

/**
* HashMap的实例
*/
public class Demo {
public static void main(String[] args) {
//HashMap对象
Map<Integer,String> map=new HashMap<Integer,String>();

//向集合中添加元素
map.put(1,"Java");
map.put(2,"c++");
map.put(3,"c");
//向集合中删除元素
map.remove(1,"java");
//遍历集合
Set<Map.Entry<Integer,String>> set=map.entrySet();
Iterator<Map.Entry<Integer,String>> it=set.iterator();
while(it.hasNext()){
Map.Entry<Integer,String> entry=it.next();
System.out.println(entry.getKey()+"-"+entry.getValue());
}
/*
..........还有很多方法在此不一一赘述
*/

}

}


  set是一种无序,不可重复的集合,它的两个主要实现类,一个HashSet另一个TreeSet。类似于Map,HashSet不能够给元素进行排序,而Treeset可以。但是需要元素实现了Comparable或Comparator接口的方法,才能进行比较。具体事宜可以查看Comparable和Comparator的工作机制,在此我只是简单介绍下。任何对象想要排序各自的大小必须给它一个标准,按照这个标准来排序。而这个标准就定义在Comparable和Comparator两个接口中。而很多官方定义的类如(Integer,String)都实现了Comparable里的compareTo方法,所以不用我们人为的去添加。但是我们自己定义的类需要我们去实现这写方法。

posted on 2018-09-19 20:19  程序员里的数学家  阅读(1128)  评论(0编辑  收藏  举报

导航