码迷,mamicode.com
首页 > 编程语言 > 详细

java基础_集合

时间:2016-05-09 18:19:29      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

集合
1.List:继承Collection接口,实现类有ArrayList LinkedList Vector ;有序,值可重复,可以存储空值;

①List遍历方法:

 1 public static void main(String[] args) {
 2         List<String> list = new ArrayList<String>();
 3         //插入数据
 4         list.add(null);list.add("a");list.add("b");list.add("a");
 5         
 6         //遍历方法1
 7         Iterator<String> iterator = list.iterator();
 8         while(iterator.hasNext()){
 9             System.out.print(iterator.next()+",");
10         }
11         
12         System.out.println();
13                 
14         //遍历方法2
15         /*
16          * listIterator()是List独有遍历方法,不仅可以从前往后遍历,      也可以逆向遍历。iterator()只能从前往后遍历;
17          * 有add set remove方法,也可以获得遍历的位置;
18          */
19         ListIterator<String> listIterator = list.listIterator();
20         //从前往后遍历
21         while(listIterator.hasNext()){
22             System.out.print(listIterator.next()+",");
23         }
24         System.out.println();
25         //从后往前遍历
26         while(listIterator.hasPrevious()){
27             System.out.print(listIterator.previous()+",");
28         }
29         System.out.println();
30         //add方法
31         listIterator.add("c");
32         listIterator = list.listIterator();
33         while(listIterator.hasNext()){
34             System.out.print(listIterator.next()+",");
35         }
36         System.out.println();
37         //remove方法,iterator也有remove方法
38         listIterator.remove();
39         listIterator = list.listIterator();
40         while(listIterator.hasNext()){
41             System.out.print(listIterator.next()+",");
42         }
43         System.out.println();
44         //set方法
45         listIterator.set("change");
46         listIterator = list.listIterator();
47         while(listIterator.hasNext()){
48             System.out.print(listIterator.next()+",");
49         }
50         
51         System.out.println();
52         //遍历方法3
53         for(String str:list){
54             System.out.print(str+",");
55         }
56         
57         System.out.println();
58         //遍历方法4 java8新特性
59         list.forEach(e->{
60             System.out.print(e+",");
61         });
62         
63     }

List接口的实现类ArrayList LinkedList Vector都适用以上遍历方法。

②ArrayList LinkedList Vector之间的区别

ArrayList和LinkedList都是非同步的,线程不安全,当多线程时list改变会报错ConcurrentModificationException

 1 public class ListSynchronizationTest {
 2 
 3     public static void main(String[] args) {
 4         List<String> list = new LinkedList<>();
 5         list.add("a");
 6         list.add("b");
 7         
 8         Thread thread1 = new Thread(new Runnable() {
 9             public void run() {
10                 itertor(list);
11             }
12         });
13         thread1.start();
14         
15         Thread thread2 = new Thread(new Runnable() {
16             public void run() {
17                 list.add("c");
18             }
19         });
20         thread2.start();
21     }
22     
23     public static void itertor(List<String> list){
24         for(String str:list){
25             System.out.print(str+",");
26         }
27     }
28 }

但是可以自己写同步方法Collections.synchronizedList(list);

ArrayList:非同步,实现了可变大小的数组(默认大小是10),ArrayList随机查询性能高(因为数组可以直接用索引查找),增加删除性能低(数组会移动,所以慢。但如果是一个数据的操作,反而LinkList性能不如ArrayList);

LinkList:非同步,链表式结构,对于增加删除性能高。

Vector:类似ArrayList,但是Vector是同步的,当遍历时改变集合,会抛出异常ConcurrentModificationException。当不考虑线程安全的情况时,ArrayList性能高。当当前集合的元素数量大于集合的长度时,Vector性能高,因为Vector增长是100%,ArrayList是50%;
Stack:继承于Vector;
Set: 实现了Collection接口。不可重复,无序;HashSet,TreeSet,EnumSet三个类实现了Set接口;
HashSet:无序,不可重复,非同步,可存储空值。
LinkedHashSet:继承HashSet,有序,可存储空值。
TreeSet:SortedSet接口的唯一实现,有序,不可重复,不能存储空值。
EnumSet:EnumSet是一个专门为枚举类设计的集合,内部以向量的方式存储,占用内存很少,运行效率很高,不能存储空值。
Map: 并不是继承Collection接口,是以键值对形式存储数据的。
HashTable:同步的,线程安全的。无序,key和value都不能是空,当自己定义的类作为key时,需要实现hashCode和equals方法。
HashMap:不是同步的,无序,空值可以作为key和value;
WeakHashMap:HashMap的改进,当key不被外部引用时可以被GC回收。
TreeMap:是实现的SortedMap接口,是有序的。空值不能作为key和value;

java基础_集合

标签:

原文地址:http://www.cnblogs.com/shichaohome/p/5474873.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!