黑马程序员技术交流社区

标题: (主推)List和Set集合的总结 [打印本页]

作者: hou604720966    时间: 2013-5-12 10:52
标题: (主推)List和Set集合的总结
List:
是有序的集合;按照数据的插入前后顺序存储数据,可以有重复数据,有下标,用户可以通过索引来访问List中的元素,类似于java中数组。因为List关心的是索引,与其他集合相比, List特有的就是和索引相关的一些方法:get(int index) 、 add(int index,Object o) 、 indexOf(Object o)。
  1. <p>/*
  2.   * List接口的常用方法:</p><p>  * */
  3. public void ListTools(){
  4.                
  5.                 //泛型为JDK1.5及以上版本才有的
  6.                 //List<Object> list = new ArrayList();
  7.                 List list = new ArrayList();
  8.                 list.add("姓名");//向list增加元素
  9.                 list.add(1);
  10.                 list.add(1.0);
  11.                 list.add(100L);
  12.                 list.add('A');
  13.                
  14.                 System.out.println("原有集合:" + list);
  15.                
  16.                 list.add(5,"性别");//通过索引增加元素
  17.                
  18.                 System.out.println("增加后集合:" + list);
  19.                
  20.                 list.set(5, "女");//通过索引修改元素
  21.                
  22.                 System.out.println("修改后集合:" + list);
  23.                
  24.                 System.out.println("获取指定集合索引中的值:" + list.get(0));
  25.                
  26.                 list.remove(0);//通过索引移除元素
  27.                
  28.                 System.out.println("移除后集合:" + list);
  29.                
  30.                 System.out.println("女在list中首次出现的位置:" + list.indexOf("女"));//返回此列表中第一次出现的指定元素的索引 ,如果不包含则返回-1;
  31.                
  32.                 System.out.println("姓名在list中首次出现的位置:" + list.indexOf("姓名"));//返回此列表中第一次出现的指定元素的索引 ,如果不包含则返回-1;
  33.                
  34.                 list.add("女");
  35.                
  36.                 System.out.println("增加后集合:" + list);
  37.                
  38.                 System.out.println("女在list中最后出现的位置:" + list.lastIndexOf("女"));//返回此列表中最后出现的指定元素的索引;如果不包含则返回 -1
  39.                
  40.                 System.out.println("姓名在list中最后出现的位置:" + list.lastIndexOf("姓名"));//返回此列表中最后出现的指定元素的索引;如果不包含则返回 -1
  41.                
  42.                 //获取所有元素
  43.         ListIterator listit = list.listIterator();//列表迭代器
  44.         
  45.         while(listit.hasNext()){
  46.                 System.out.println(listit.next());
  47.         }

  48.         //子列表
  49.         List list_new = list.subList(0,3);//返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图
  50.         System.out.println(list_new);
  51.         
  52.         
  53.         }</p>
复制代码
ArrayList与LinkedList与Vector的区别
ArrayList:底层数据结构是数组结构,非同步,特点:查询速度快。
LinkedList:底层数据结构是链表,非同步,特点:插入和删除快。
Vector:底层数据结构是数组结构,同步,特点:


Set:
是无序的集合,不能有重复数据存储,无下标,关心唯一性,它不允许重复,是因为Set判断两个对象相同不是使用==运算符,而是根据equals方法。即两个对象用equals方法比较返回。
  1. /*
  2.          * Set常用方法
  3.          * */
  4.         public void SetTools(){
  5.                 HashSet<String> set = new HashSet();//泛型JDK1.5及以上版本
  6.                
  7.                 set.add("姓名");//向set增加元素
  8.                 set.add("年龄");
  9.                 set.add("性别");
  10.                
  11.                 System.out.println("原有集合:" + set);//通过打印可以看出set集合是无序的
  12.                
  13.                 //验证set的唯一性
  14.                 set.add("姓名");
  15.                 System.out.println("现有集合:" + set);//通过打印验证了set集合的唯一性
  16.                
  17.                 System.out.println(set.contains("姓名"));//是否包含  返回true或false
  18.                
  19.                 set.remove("姓名");//删除元素
  20.                
  21.                 System.out.println("删除后集合:" + set);
  22.                
  23.                 HashSet<String> hs = (HashSet)set.clone();//返回此 HashSet 实例的浅表副本:并没有复制这些元素本身。
  24.                
  25.                 System.out.println("hs:" + hs);
  26.                
  27.                 //set遍历
  28.                 for(String str : set){//JDK1.5及以上版本
  29.                         System.out.print(str + "   ,   ");
  30.                 }
  31.                 System.out.println();
  32.                 Iterator it = set.iterator();//迭代器
  33.         while(it.hasNext()){
  34.                 System.out.print((String)it.next() + "  ,  ");
  35.         }
  36.         System.out.println();
  37.         }
复制代码
Collection与Collections的区别
Collection好比是种植出来的水果,Collections则是对水果进行包装处理
Collection:该类为接口,
Collections:该类为包装类包含有关集合操作的静态方法,


Arrays工具类
该类是数组的各种方法
  1. /*
  2.          * Arrays常用方法
  3.          * */
  4.         public void ArraysTools(){
  5.                 //返回一个受指定数组支持的固定大小的列表
  6.                 List list = Arrays.asList("AAA","BBB");
  7.                 System.out.println(list);
  8.                
  9.                 // 使用二分搜索法来搜索指定数组,以获得指定对象。
  10.                 //该方法是重载方法
  11.                 System.out.println(Arrays.binarySearch(new String[]{"AA", "BB", "CC"}, "AA"));
  12.                
  13.                 //如果没有搜索到返回 (-(插入点) - 1)       该方法为JDK1.6及以上版本
  14.                 System.out.println(Arrays.binarySearch(new String[]{"AA", "BB", "CC", "DD"}, 1, 2, "AA"));
  15.                
  16.                 //复制指定的数组,以使副本具有指定的长度。
  17.                 //该方法是重载方法
  18.                 char[] c = Arrays.copyOf(new char[]{'a', 'b', 'c', 'd', 'e'}, 2);
  19.                 for(char a : c){
  20.                         System.out.print(a + " - ");
  21.                 }
  22.                 System.out.println();
  23.                
  24.                 //将指定数组的指定范围复制到一个新数组。
  25.                 //该方法是重载方法
  26.                 char[] b = Arrays.copyOfRange(new char[]{'a', 'b', 'c', 'd', 'e'}, 0, 4);
  27.                 for(char a : b){
  28.                         System.out.print(a + " - ");
  29.                 }
  30.                 System.out.println();
  31.                
  32.                 // 如果两个指定的 char 型数组彼此相等,则返回 true。
  33.                 //该方法是重载方法
  34.                 System.out.println(Arrays.equals(new char[]{'a', 'b', 'c', 'd', 'e'}, new char[]{'a', 'b', 'c', 'd', 'e'}));
  35.                
  36.                 //将指定的 char 值分配给指定 char 型数组的每个元素。
  37.                 //该方法是重载方法
  38.                 Arrays.fill(b, 'c');
  39.                 System.out.println(b);
  40.                
  41.                 b = Arrays.copyOfRange(new char[]{'a', 'b', 'c', 'd', 'e'}, 0, 4);
  42.                 //将指定的 char 值分配给指定 char 型数组指定范围中的每个元素。
  43.                 Arrays.fill(b, 1, 3, 'c');
  44.                 System.out.println(b);
  45.                
  46.                 //基于指定数组的内容返回哈希码。
  47.                 //该方法是重载方法
  48.                 System.out.println(Arrays.hashCode(b));
  49.                
  50.                 int[] i = {12, 45, 9, 2, 7, 0};
  51.                 //对指定的 int 型数组按数字升序进行排序。
  52.                 //该方法是重载方法
  53.                 Arrays.sort(i);
  54.                 for(int a : i){
  55.                         System.out.print(a + "  -  ");
  56.                 }
  57.                 System.out.println();
  58.                
  59.                 //返回指定数组内容的字符串表示形式。   JDK1.5及以上版本
  60.                 //该方法是重载方法
  61.                 String str = b.toString();
  62.                 System.out.println(str);
  63.         }
复制代码

作者: 神之梦    时间: 2013-5-12 11:25
楼上的真心快
作者: 蚂蚁搬家    时间: 2013-5-12 20:03
伙计太强了,总是有神贴,不得不佩服!
作者: 曹睿翔    时间: 2013-5-12 20:33
这个在你之前就有张林敏发过帖子,另外呢,这是对应我推出的活动的,你并没有领任务!
你觉得有必要就多注意我发帖的动态。要求,没有就算了
一个辛苦分,不多




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2