集合可理解为动态的对象数组,
特点:集合中的对象内容可以任意扩充;性能高,容易扩展和修改;
collection常用子类包括List; Set; Queue等子类。
Collection<T>:泛型接口,方法查询手册
可以存放任意的数据,而且在List接口中内容是可以重复的。
继承自collection<E>接口 ->List<E>接口 ->AbstractList<E>类-> ArrayList<E>类, Vector<E>类
常用子类:ArrayList;Vector
import java.util.ArrayList; import java.util.List; public class GenerateDemo02 { public static void main(String[] args) { // public class ArrayList<E> extends AbstractList<E> implements List<E> //第一种初始化 List<String> Lists01 = new ArrayList<String>(); Lists01.add("hello!"); //第二种初始化 ArrayList<String> lists02 = new ArrayList<String>(); lists02.add("nihao"); lists02.add("jikeyueyuan"); lists02.add("jikeyueyuan"); //通过循环遍历打印所有值 for (int i = 0; i < lists02.size(); i++) { System.out.println(lists02.get(i)); } //通过toString()打印所有值 System.out.println(lists02.toString()); System.out.println(lists02.indexOf("jikeyueyuan")); } } 输出结果: nihao jikeyueyuan jikeyueyuan [nihao, jikeyueyuan, jikeyueyuan] 1
采用异步处理方式,高性能,速度高,属于非线程安全;
采用同步处理方式,性能低,属于线程安全;
与List接口相比,Set接口不能加入重复元素,但可以排序;
Set接口常用子类:散列存放 HashSet;有序存放 TreeSet
import java.util.HashSet; import java.util.Set; import java.util.TreeSet; public class GenerateDemo02 { public static void main(String[] args) { TreeSet<String> ts = new TreeSet<String>(); ts.add("C"); ts.add("Bb"); ts.add("E"); ts.add("Ba"); ts.add("A"); ts.add("D"); ts.add("F"); System.out.println("TreeSet有序排列去掉重复:" + ts); HashSet<String> hs = new HashSet<String>(); hs.add("Da"); hs.add("F"); hs.add("F"); hs.add("B"); hs.add("C"); hs.add("Cd"); hs.add("D"); hs.add("D"); hs.add("lastElement"); System.out.println("HashSet无序排列去掉重复:" + hs); } } 输出: TreeSet有序排列去掉重复:[A, Ba, Bb, C, D, E, F] HashSet无序排列去掉重复:[Cd, B, C, D, F, lastElement, Da]
集合输出的标准操作
标准做法使用
操作原理
Interator是专门的迭代输出接口,迭代输出就是讲元素一个个进行判断,判断其是否有内容,如果有内容则内容取出来。单向输出的方式。
hasNext();判断下一个是否还有元素
next(): 返回迭代的下一个元素;
remove():从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操作)。
import java.util.ArrayList; import java.util.Iterator; public class GenerateDemo02 { public static void main(String[] args) { ArrayList<String> al = new ArrayList<String>(); al.add("A"); al.add("Bz"); al.add("B"); al.add("Bq"); al.add("Bs"); al.add("Ba"); al.add("A"); System.out.println(al); Iterator<String> iter = al.iterator(); while(iter.hasNext()){ String str = iter.next(); if("A".equals(str)){ //使用迭代器的remove删除元素不会出现问题,不能通过集合的remove删除元素 iter.remove(); }else{ System.out.println(str); } } } }
参考地址:http://zhidao.baidu.com/link?url=RS7FQqhsMHohIECR66tbxjK49MSiQxOy2IO5cb5GAAlqAMBB8QP-h2bbU1Xxnstsyfzq2REtLqU3_XKDTB-hdq
1.功能
迭代器,它是需要顺序迭代的,你无法随机挑选元素 .而利用for循环的方式,你可以随机的挑选元素.
2.效率
迭代器效率也比for循环的方式高些.
3.用处
在不需要挑选元素的时候尽量用迭代,在个性化比较强的地方,用FOR.
jdk5.0以上的for-each也是利用内部的iterator来遍历集合的(跟以前的iterator一样)获得的Iterator是一个内部类产生的迭代器,这个迭代器在调用next方法时,会检查列表是否被修改过,如果被修改过,就会抛出ConcurrentModificationException异常。
Iterator 是工作在一个独立的线程中,并且拥有一个 mutex 锁。 Iterator 被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照 fail-fast 原则 Iterator 会马上抛出 java.util.ConcurrentModificationException 异常。
所以 Iterator在工作的时候是不允许被迭代的对象被改变的。但你可以使用 Iterator 本身的方法 remove() 来删除对象,Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。
参考地址:http://blog.csdn.net/ld513508088/article/details/8447135
保存形式:
key -> value保存方法
常用子类:
HashMap: 无序存放,key不允许重复,key都是唯一的;
Hashtable: 无序存放,key不允许重复
import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class GenerateDemo02 { public static void main(String[] args) { // .put()方法,.get()方法 HashMap<Integer, String> hm = new HashMap<>(); hm.put(1, "Hello"); hm.put(2, "-"); hm.put(3, "jkexueyuan"); String str = hm.get(3); System.out.println(str); // 查询是否包含指定key或者value if (hm.containsKey(2) && hm.containsValue("Hello")) { System.out.println("key=2, value=Hello 存在"); } else { System.out.println("key=2,value=Hello 不存在"); } //通过迭代遍历元素 //将map的key转换为set接口类型,set接口继承collection接口,也就是具有iterator方法 Set<Integer> s = hm.keySet(); Iterator<Integer> iter = s.iterator(); while(iter.hasNext()){ //调用一次.next后会指向下一个元素,所以后面使用该值需要先保存一下 Integer i = iter.next(); System.out.println(i + ":" + hm.get(i)); } //得到所有的value值,因为该值不唯一,所以需要转换到colletcion接口类型 Collection<String> str1 = hm.values(); Iterator<String> iter1 = str1.iterator(); while(iter1.hasNext()){ System.out.println(iter1.next()); } } }