容器是指对对象的容纳,java中主要有这几个容器:list(列表)、set(集合)、map(映射)。所有容器都无法保存基本数据类型,需要先把基本数据类型变为封装类,用容器保存封装结果。
一.List(列表)
1.ArrayList,线性表,容量大小可变的数组 <===>tArrayLisk()
2.LinkedList,链表,没有使用顺序存储机制,无法根据索引快速存取 <===>tLinkedList()
3.迭代器遍历LIst <===>demo2()
1 public static void tArrayList(){ 2 /* 3 ArrayList的构造方法: 4 ArrayList a1=new ArrayList(); //构造一个空的线性表 5 ArrayList a1=new ArrayList(b); //根据已有类集构造线性表 6 ArrayList a1=new ArrayList(20); //构造指定初始容量的线性表 7 */ 8 ArrayList a1=new ArrayList(); 9 a1.add("a"); 10 a1.add("z"); 11 a1.add("x"); //add(value),插入元素 12 a1.remove(0); //remove(index),根据数组索引删除元素 13 a1.set(0,"z1"); //set(index,value),重设指定索引处的值 14 System.out.println(a1.indexOf("z1")); //indexOf(value),获取指定元素的索引 15 a1.add("z1"); 16 System.out.println(a1.lastIndexOf("z1")); //latIndexOf()value,获取指定元素最后一次出现的位置 17 // subList(),获取列表的子列表,需要给出起止位置 listIterator(),生成一个列表迭代器,此迭代器功能强大 18 19 for(int i=0;i<a1.size();i++){ //ArrayList.size()记录元素个数,用法同arr.length() 20 System.out.print(a1.get(i)+","); 21 } 22 23 } 24 public static void tLinkedList(){ 25 LinkedList l=new LinkedList(); 26 l.addFirst(1); //addFirest(),向链表头添加元素 27 l.addLast(10); //addLast(),向链表尾添加元素 28 l.removeLast(); //removeLast(),移除链表尾部元素 29 System.out.println(l.getFirst()); //getFirst(),获取链表头元素 30 } 31 public static void demo2(){ 32 //使用迭代器遍历List 33 List<String> l1=new ArrayList<String>(); 34 l1.add("a1"); 35 l1.add("a2"); 36 l1.add("a3"); 37 for(Iterator<String> it=l1.iterator();it.hasNext();){ //使用hasNext()判断序列中是否还有元素 38 String s=it.next(); //使用Next()获取序列中下一个元素 39 System.out.println(s); 40 } 41 }
二.Set(集合)
Set和List的区别:Set没有顺序,不允许保存相同值的元素。
1.Iterator,迭代器,单向移动,实现遍历 <===>demo1()
2.for-each遍历 <===>demo2()
3.HashSet散列集,避免Set的元素重复 <===>demo3()
4.TreeSet,实现红黑树数据结构后的set
5.比较HashSet、TressSet、LinkedHashSet的区别 <===>demo4()
public static void demo1(){ Set<String> s1=new HashSet<String>(); s1.add("a1"); s1.add("a2"); s1.add("a3"); for(Iterator<String> it=s1.iterator();it.hasNext();){ String s=it.next(); System.out.println(s); } } public static void demo2(){ Set<String> s1=new HashSet<String>(); s1.add("a1"); s1.add("a2"); s1.add("a3"); for(String s:s1){ //for-each遍历set,将每一次的值存在s中 System.out.println(s); } } public static void demo3(){ Set<Integer> s1=new HashSet<Integer>(); //new一个HashSet,通过下边的for循环为该set填充值 for(int i=1;i<100;i++){ Integer temp=new Integer(i%6); s1.add(temp); } for(Iterator<Integer> it=s1.iterator();it.hasNext();){ //通过Iterator遍历set System.out.println(it.next()); } } public static void demo4(){ //比较HashSet、TreeSet、LinkedHashSet的区别 Set<Integer> s1=new HashSet<Integer>(); Set<Integer> s2=new TreeSet<Integer>(); Set<Integer> s3=new LinkedHashSet<Integer>(); for(int i=0;i<5;i++){ int s=(int)(Math.random()*100); Integer temp=new Integer(s); s1.add(temp); s2.add(temp); s3.add(temp); System.out.println("第"+i+"次产生的随机数为:"+s); } System.out.println("HashSet:"+s1); //元素存放顺序和添加时的顺序无关 System.out.println("TreeSet:"+s2); //对set中的元素按照值进行排序存放 System.out.println("LinkedHashSet:"+s3); //元素存放顺序按照添加时的顺序 }
三.Map(映射)
Map维护键值对,一个Map中不能有重复的键,每个键只能映射一个值,键与值都视为对象,Map允许null值,基于哈希表的Map接口实现,哈希表的作用是保证键的唯一性。
1.Map遍历的三种方法
1 public static void byValue(Map<String,String> map){ 2 String value=null; 3 Iterator it= map.values().iterator(); //通过HashMap.values()得到“值”的集合,再去遍历值的集合 4 while(it.hasNext()){ 5 value=(String)it.next(); 6 System.out.println(value); 7 } 8 } 9 public static void byKey(Map<String,String> map){ 10 String key=null; 11 String value=null; 12 Iterator it=map.keySet().iterator(); //通过map.KeySet()得到key的集合 13 while(it.hasNext()){ 14 key=(String)it.next(); 15 value=(String)map.get(key); 16 System.out.println("key:"+key+",value:"+value); 17 } 18 } 19 public static void byEntry(Map<String,String> map){ 20 String key=null; 21 String value=null; 22 Iterator it=map.entrySet().iterator(); //通过entrySet()实现 23 while(it.hasNext()){ 24 Map.Entry entry=(Map.Entry) it.next(); 25 key=(String)entry.getKey(); 26 value=(String)entry.getValue(); 27 System.out.println("key:"+key+",value:"+value); 28 } 29 }
2.HashMap散列映射
3.其他Map