浅谈java集合
Posted ruanjiancainiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈java集合相关的知识,希望对你有一定的参考价值。
1、集合的分类(都位于java.util包下)
集合框架体系如图所示
1)collection是集合的父类接口(map集合除外),set和list集合都是继承自他;
1> list接口
1)他的实现类有Arraylist、Vector和LinkedList三种;
Arraylist: 实现了长度可变的数组,在随机查找和遍历时效率比较高;往集合中添加元素是用add()方法;并且它是线程非同步的,ArrayList 增长当前长度的50%,插入删除效率低;
LinkedList:采用链表存储方式,在插入、删除元素时比较方便;并且其中允许null值得存在;《list.add(null);》
Vector: 他和Arraylist非常相似,唯一区别是他是线程安全的,即线程同步;每次增加原来长度的一倍;
2〉Set接口
1)它的实现类有Hashset和ThreeSet;
hashset:集合中元素无序,唯一,可以存放null值;线程非同步的;当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置。简单的说,hashset集合存放元素是通过equals()方法比较相等,并且hashcode()的返回值也相等;如果要把一个对象放入集合中,重写该对象对应类的equals(),也应该重写其hashcode(),其规则是如果两个对象的equals比较返回值true,其hashcode值也应该相等;另外,对象中用来比较equals的属性也应该用来比叫hashcode值;
threeSet:集合中元素有序,TreeSet是SortedSet接口的唯一实现类,他的两种排序方式为自然排序和定制排序;其中自然排序为默认的排序方式,定制排序需要实现comparable接口;
这两种集合都需要通过迭代器来方问,因为他们都没有get();
2)Map集合的实现类hashmap、HashTable、TreeMap
1〉 Map集合是通过键——值对的方式来存放元素的;根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,但是他的只可以有多个null,不支持线程同步。
2〉 HashMap和hashTable区别:
hashmap的元素可以为空,线程非安全的,hashtable的元素不可以为空,是线程安全的;
Hashtable 比 HashMap 慢,因为它是同步的
HashMap可以通过Map m = Collections.synchronizedMap(hashMap)来达到同步的效果。
TreeMap的内部结构是一棵红黑树(又叫排序数,是二叉树的一种),使用链式存储,可以指定比较器Comparator,key需实现Comparable接口。key不能为null。存结点性能稍差,因为需要调整树结构;取结点用的是链表遍历,但是属于有序比较,性能中等。迭代遍历时用的树的中序遍历,是一个有序序列。适用于有排序需求的情况。
3)迭代器(算法)
一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象,实现了Iterator 接口或ListIterator接口。
1〉遍历Arraylist集合
List<String> list=new ArrayList<String>(); list.add("Hello"); list.add("World"); list.add("HAHAHAHA"); //第一种遍历方法使用foreach遍历List for (String str : list) { //也可以改写for(int i=0;i<list.size();i++)这种形式 System.out.println(str);
//第二种方法,把链表变为数组相关内容进行遍历
String [] s=new String[list.size()]
list.toArray(s);
for(int i=0,i<s.length,i++){
system.out.print(s[i]);
}
//第三种,使用迭代器进行遍历
Iterator is=list.itrrator();
while(is.haNext){
system.out.print(is.next())
}
2> 遍历Map集合
Map<String, String> map = new HashMap<String, String>(); map.put("1", "value1"); map.put("2", "value2"); map.put("3", "value3"); //第一种:普遍使用,二次取值
System.out.println("通过Map.keySet遍历key和value:");
for (String key : map.keySet()) {
System.out.println("key= "+ key + " and value= " + map.get(key));
}
//第二种
System.out.println("通过Map.entrySet使用iterator遍历key和value:");
for(Entry<String,String> item: map.entrySet()){
system.out.print(item.getKey()+"-"+item.getValue())
}
//第三种
System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
for (String v : map.values()) {
System.out.println("value= " + v);
}
}
以上是关于浅谈java集合的主要内容,如果未能解决你的问题,请参考以下文章