(每日一转)黑马程序员----跟着老毕学Java-集合框架篇之Map与工具类

来源:互联网 发布:淘宝网太极武术鞋 编辑:程序博客网 时间:2024/05/17 00:56

Map和集合工具类

Map

概述

Map集合:它存储的是键值对,其中键必须保证唯一性,值允许重复。Map集合没有自身特有的迭代器,它的元素取出是通过将键或键值对放入Set集合中,利用Set集合中的迭代器取出的。Map是双列集合,Collection是单列集合。

共性方法

Map接口中定义了该体系通用的方法。

1.添加

V put(K key, V value)

void putAll(Map<? extends K,? extends V>m)

注意putadd的不同put时,如果key已经存在,则新存入的值覆盖原来的值,并把原来的值作为方法的返回值;add时,如果该元素已经存在,则不能存入集合,方法返回值为false,如果存在,则存入集合,方法返回值为true

2.删除

clear()

V remove(Object key)

3.判断

boolean containsKey(Object key)

boolean containsValue(Object value)

boolean isEmpty()

4.获取

V get(Object key)

int size()

Collection<V> values()

Set<Map.Entry<K,V>>entrySet()

Set<K> keySet()

示例代码1

[java] view plaincopyprint?
  1. import java.util.Collection;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. class MapDemo
  5. {
  6. public staticvoid main(String[] args)
  7. {
  8. Map<String,String> map = new HashMap <String,String>();
  9. System.out.println("put:"+map.put("01","zhangsan01"));//结果为null
  10. System.out.println("put:"+map.put("01","wangwu"));//结果我zhangsan01
  11. /*
  12. put如果存入了已经存在的键,则新键值会覆盖旧键值,并将旧键值返回;put存入一个未存在的键时,会返回null。
  13. */
  14. map.put("02","zhangsan02");
  15. map.put("03","zhangsan02");
  16. map.put(null,null);
  17. System.out.println("containsKey:"+map.containsKey("022"));
  18. //System.out.println("remove:"+map.remove("02"));
  19. System.out.println("get:"+map.get("023"));
  20. map.put("04","null");
  21. System.out.println("get:"+map.get("04"));
  22. //可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断。(毕老师这点讲的是不是有问题?)
  23. //获取map集合中的值
  24. Collection <String> coll =map.values();
  25. System.out.println(coll);
  26. System.out.println(map);
  27. }
  28. }
  29. /*
  30. 既然hashMap可以存放null键null值,那么通过get方法返回null,应该不能判断该键是不是存在,因为可能出现有键值为空的情况;这时就要用containsKey()方法来判断了
  31. */


Map的体系

Map

|---Hashtable<K,V>:底层是哈希表数据结构,不可以存入nullnull值,该集合是同步的。JDK1.0,效率低。,

|---HashMap<K,V>:底层是哈希表数据结构,允许存入nullnull值,该集合是不同步的。JDK1.2,效率高。

|---TreeMap<K,V>:底层是二叉树结构,线程不同步,可以用于给Map集合中键进行排序。

Set很像,其实Set底层就是使用了Map集合。

元素取出的两种方式

示例代码2

[java] view plaincopyprint?
  1. /*
  2. map集合的两种取出方式:
  3. 1.Set<K> keySet;将map中的所有的键存入到Set集合,因为set具有迭代器。
  4. 所以可以迭代方式取出所有的键,再根据get方法,获取每一个键对应的值。
  5. Map集合的取出原理:将Map集合转成Set集合,再通过迭代器取出。
  6. 2.Set<Map.Entry<K,V>> entrySet:将Map集合中的映射关系存入到了Set集合中,
  7. 而这个关系的数据类型就是:Map.Entry.
  8. */
  9. import java.util.HashMap;
  10. import java.util.Iterator;
  11. import java.util.Set;
  12. import java.util.Map;
  13. class MapDemo2
  14. {
  15. public staticvoid main(String[] args)
  16. {
  17. Map <String,String> map = new HashMap<String ,String>();
  18. map.put("01","zhangsan01");
  19. map.put("02","zhangsan02");
  20. map.put("03","zhangsan03");
  21. map.put("04","zhangsan04");
  22. System.out.println(map);
  23. System.out.println("-------------");
  24. //Map元素取出的方式一(EntrySet):将Map集合中的映射关系取出,存入到Set集合中。
  25. Set<Map.Entry<String , String>> entrySet = map.entrySet();
  26. System.out.println(entrySet);
  27. System.out.println("-------------");
  28. Iterator<Map.Entry<String , String>> it = entrySet.iterator();
  29. while(it.hasNext())
  30. {
  31. Map.Entry<String,String> me = it.next();
  32. String key = me.getKey();
  33. String value = me.getValue();
  34. System.out.println(me);
  35. System.out.println("key:"+key+",value="+value);
  36. }
  37. //元素取出的方式二(KeySet)
  38. /*
  39. //先获取map集合的所有键的Set集合。
  40. Set<String> keySet = map.keySet();
  41. //有了Set集合,就可以获取机迭代器。
  42. Iterator<String> it = keySet.iterator();
  43. while(it.hasNext())
  44. {
  45. String key = it.next();
  46. String value = map.get(key);
  47. System.out.println("key:"+key+",value="+value);
  48. }
  49. */
  50. }
  51. }
  52. /*
  53. Map.Entry 其实Entry也是一个接口,他是Map接口中的一个内部接口。如下:
  54. interface Map
  55. {
  56. public static interface Entry
  57. {
  58. public abstract Object getKey();
  59. public abstract Object getValue();
  60. }
  61. }
  62. class HashMap implements Map
  63. {
  64. class Haha implements Map.Entry
  65. {
  66. public Object getKey(){}
  67. public Object getValue(){}
  68. }
  69. }
  70. */

练习1

[java] view plaincopyprint?
  1. /*
  2. 每一个学生都有对应的归属地
  3. 学生Student,地址String
  4. 学生属性:姓名,年龄
  5. 注意:姓名和年龄相同视为同一个学生
  6. 保证学生的唯一性。
  7. 1.描述学生
  8. 2.定义Map容器,将学生作为键,地址作为值,存入。
  9. 3.获取Map集合中的元素。
  10. */
  11. import java.util.*;
  12. class MapTest
  13. {
  14. public staticvoid main(String[] args)
  15. {
  16. HashMap<Student,String> hm = new HashMap<Student,String>();
  17. hm.put(new Student("lisi1",22),"beijing");
  18. hm.put(new Student("lisi1",22),"shanghai");
  19. hm.put(new Student("lisi3",24),"wuhan");
  20. hm.put(new Student("lisi4",25),"nanjing");
  21. //第一种取出方式:keySet()
  22. Iterator<Student> it = hm.keySet().iterator();
  23. while(it.hasNext())
  24. {
  25. Student stu = it.next();
  26. String addr = hm.get(stu);
  27. System.out.println(stu+".."+addr);
  28. }
  29. System.out.println("-------------");
  30. //第二种取出方式:entrySet()
  31. Set<Map.Entry<Student,String>> entrySet = hm.entrySet();
  32. Iterator<Map.Entry<Student,String>> ite = entrySet.iterator();
  33. while(ite.hasNext())
  34. {
  35. Map.Entry<Student,String> me = ite.next();
  36. Student s = me.getKey();
  37. String str = me.getValue();
  38. System.out.println(s+","+str);
  39. }
  40. }
  41. }
  42. /*
  43. 为什么将复写equals、hashCode方法,并实现comparable接口?
  44. 因为,Sutdent有可能存入HashMap中,也有可能存入TreeMap中。
  45. */
  46. class Student implements Comparable<Student>
  47. {
  48. private String name;
  49. private int age;
  50. Student(String name,int age)
  51. {
  52. this.name = name;
  53. this.age = age;
  54. }
  55. public String getName()
  56. {
  57. return name;
  58. }
  59. public void setName(String name)
  60. {
  61. this.name = name;
  62. }
  63. public int getAge()
  64. {
  65. return age;
  66. }
  67. public void setAge(int age)
  68. {
  69. this.age = age;
  70. }
  71. public int hashCode()
  72. {
  73. return name.hashCode()+37*age;//这点要注意
  74. }
  75. public boolean equals(Object obj)
  76. {
  77. if( !(obj instanceof Student))
  78. throw new ClassCastException("类型不匹配");
  79. Student s = (Student) obj;
  80. return this.name.equals(s.getName())&&this.age==s.getAge();
  81. }
  82. public int compareTo(Student s)
  83. {
  84. int num = new Integer(this.age).compareTo(new Integer(s.getAge()));
  85. if(num == 0)
  86. this.name.equals(s.name);
  87. return num;
  88. }
  89. public String toString()
  90. {
  91. return name+","+age;
  92. }
  93. }

练习2

[java] view plaincopyprint?
[java] view plaincopyprint?
  1. /*
  2. 需求:对学生对象的年龄进行升序排序。
  3. 因为数据是以键值对形式存在的,所以要使用可以排序的Map集合,TreeMap。
  4. */
  5. import java.util.*;
  6. class StuNameComparator implements Comparator<Student>
  7. {
  8. public int compare(Student s1,Student s2)
  9. {
  10. int num = s1.getName().compareTo(s2.getName());
  11. if(num == 0)
  12. return new Integer(s1.getAge()).compareTo(s2.getAge());
  13. return num;
  14. }
  15. }
  16. class MapTest2
  17. {
  18. public staticvoid main(String[] args)
  19. {
  20. TreeMap<Student,String> tm = new TreeMap<Student,String>(new StuNameComparator());
  21. tm.put(new Student("lisi1",22),"beijing");
  22. tm.put(new Student("alisi1",23),"shanghai");
  23. tm.put(new Student("alisi1",24),"shanghai");
  24. tm.put(new Student("xlisi3",24),"wuhan");
  25. tm.put(new Student("lisi4",25),"nanjing");
  26. Iterator<Map.Entry<Student,String>> it = tm.entrySet().iterator();
  27. while(it.hasNext())
  28. {
  29. Map.Entry<Student,String> me = it.next();
  30. Student stu = me.getKey();
  31. String addr = me.getValue();
  32. System.out.println(stu+","+addr);
  33. }
  34. }
  35. }


练习3

[java] view plaincopyprint?
  1. /*
  2. 练习:
  3. ”stdafasdffadf“获取该字符串中的字母出现的次数。
  4. 希望打印结果:a(1)c(2)。。。。
  5. 通过结果发现,每个字母都有对应的次数
  6. 说明字母和次数之间都有映射关系。
  7. 注意了,当发现有映射关系时,可以选择Map集合
  8. 因为Map集合中存放的就是映射关系。
  9. 什么时候使用Map集合呢?
  10. 当数据之间存在这个映射关系时,就要先想到Map集合。
  11. 我的思路:
  12. 1.建立字母为键,类型为char,次数为值,类型为int,的Map,因为字母按顺序打印,所以选用TreeMap
  13. 2.将字符串遍历,重复的字符,值++;
  14. 3.使用迭代器打印TreeMap集合。
  15. 毕老师思路:
  16. 1.将字符串转换成字符数组,因为要对每一个字母进行操作。
  17. 2.定义一个map集合,因为打印结果的字母有顺序,所以使用TreeMap集合。
  18. 3.遍历字符数组。
  19. 将每一个字符作为键去查map集合。
  20. 如果返回null,将该字母和1存入到map集合。
  21. 如果返回不是null,说明该字母在map集合已经存在,并有对应的次数。
  22. 那么就获取该次数进行自增,然后将该字母和自增后的次数存入到map集合中,覆盖调用原键所对应的值。
  23. 4.将map集合中的数据变成指定的字符串形式返回。
  24. */
  25. import java.util.*;
  26. class MapTest3
  27. {
  28. public staticvoid main(String[] args)
  29. {
  30. //String str = myCharCount("adfasdf!!!!!sssasdfas");
  31. String str =charCount("dsadfadfasdf");
  32. System.out.println(str);
  33. }
  34. //毕老师的方法
  35. public static String charCount(String str)
  36. {
  37. char [] chs = str.toCharArray();
  38. TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
  39. for(int x =0;x<chs.length;x++)
  40. {
  41. int count =0;
  42. char ch = str.charAt(x);
  43. if(!(ch>='a'&&ch<='z'|| ch>='A'&&ch<='Z'))
  44. continue ;
  45. Integer value = tm.get(chs[x]);
  46. /*
  47. if(value == null)
  48. tm.put(chs[x],1);
  49. else
  50. {
  51. value = value+1;
  52. tm.put(chs[x],value);
  53. }
  54. */
  55. if(value!=null)
  56. count = value;
  57. count++;
  58. tm.put(chs[x],count);
  59. }
  60. StringBuilder sb = new StringBuilder();
  61. Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();
  62. Iterator<Map.Entry<Character,Integer>>it = entrySet.iterator();
  63. while(it.hasNext())
  64. {
  65. Map.Entry<Character,Integer> me = it.next();
  66. Character ch = me.getKey();
  67. Integer value = me.getValue();
  68. sb.append(ch+"("+value+")");
  69. }
  70. return sb.toString();
  71. }
  72. //我的方法
  73. public static String myCharCount(String str)
  74. {
  75. String resault="";
  76. TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
  77. int count = 0;
  78. for(int x =0;x<str.length();x++)
  79. {
  80. char ch = str.charAt(x);
  81. if(!(ch>='a'&&ch<='z'|| ch>='A'&&ch<='Z'))
  82. continue ;
  83. if(!tm.containsKey(ch))
  84. tm.put(ch,1);
  85. else
  86. {
  87. int num =tm.get(ch)+1;
  88. tm.put(ch,num);
  89. }
  90. }
  91. Iterator<Map.Entry<Character,Integer>> it = tm.entrySet().iterator();
  92. while(it.hasNext())
  93. {
  94. Map.Entry<Character,Integer> me = it.next();
  95. char letter = me.getKey();
  96. int num = me.getValue();
  97. resault += letter+"("+num+")";
  98. }
  99. return resault;
  100. }
  101. }

Map扩展

Map集合中的值还可以是Map集合,这是Map集合嵌套使用的情况。

示例代码3

[java] view plaincopyprint?
  1. /*
  2. map扩展知识
  3. map集合使用是因为具备映射关系。
  4. “yureban” “01” “zhangsan”
  5. “yureban” “02” "lisi"
  6. "jiuyeban" "01" "zhousi"
  7. "jiuyeban" "02" "liuwu"
  8. 一个学校有多个教室,每个教室都有自己的名字,而一个教室对应多个学生。
  9. */
  10. import java.util.*;
  11. class Student1
  12. {
  13. private static String id;
  14. private String name;
  15. Student1(String id,String name)
  16. {
  17. this.id = id;
  18. this.name = name;
  19. }
  20. public String toString()
  21. {
  22. return id+":::"+name;
  23. }
  24. public staticvoid main(String[] args)
  25. {
  26. Student1 s1 =new Student1("id","name");
  27. id = "1212";
  28. Integer a = Integer.parseInt(id,10);
  29. System.out.println(s1.id);
  30. System.out.println(a);
  31. }
  32. }
  33. class MapDemo3
  34. {
  35. public staticvoid demo()
  36. {
  37. HashMap<String,List<Student1>> czbk = new HashMap<String,List<Student1>>();
  38. List<Student1> yure = new ArrayList<Student1>();
  39. List<Student1> jiuye = new ArrayList<Student1>();
  40. czbk.put("yuer:",yure);
  41. czbk.put("jiuye:",jiuye);
  42. yure.add(new Student1("01","zhangsan"));
  43. yure.add(new Student1("02","wagnwu"));
  44. jiuye.add(new Student1("01","liuqiang"));
  45. jiuye.add(new Student1("02","limeng"));
  46. Iterator<String> it = czbk.keySet().iterator();
  47. while(it.hasNext())
  48. {
  49. String roomName = it.next();
  50. List<Student1> room = czbk.get(roomName);
  51. System.out.println(roomName);
  52. getInfos(room);
  53. }
  54. }
  55. public staticvoid getInfos(List<Student1> room)
  56. {
  57. Iterator<Student1> it = room.iterator();
  58. while(it.hasNext())
  59. {
  60. System.out.println(it.next());
  61. }
  62. }
  63. public staticvoid main(String[] args)
  64. {
  65. demo();
  66. }
  67. public staticvoid getStudentInfo(HashMap<String,String> hm)
  68. {
  69. Iterator<Map.Entry<String,String>> it = hm.entrySet().iterator();
  70. while(it.hasNext())
  71. {
  72. Map.Entry<String,String> me = it.next();
  73. String num =me.getKey();
  74. String name = me.getValue();
  75. System.out.println(num+":"+name);
  76. }
  77. System.out.println(hm);
  78. }
  79. }

集合框架工具类

Collections

Collections是一个集合工具类,它没有构造方法,所有的成员方法都是静态的。利用它可以实现对集合的一些特殊操作,如排序、二分查找、取最值、反转等。

1、 List集合进行排序
Collections.sort(list)Collections.sort( list, comparator)

2、 获取集合的最大值

Collections.sort(collection)Collections.sort(collectioncomparator)

3、 二分查找
binarySearch(List<? extends Comparable<? super T>> list, T key)
binarySearch(List<? extends T> list, T key, Comparator<? super T> c)

4、 填充
filllistobj),将集合所有元素都换成obj

5、 替换
replaceAll(List<T> list, T oldVal, T newVal),将集合中出现的所有的某一个值,替换为另一个。

6、 反转

reverse(List<?> list),头变尾,尾变头。

7、随机排列
shuffle(list),应用:洗牌、掷色子。

重点掌握的下边三个方法

1、 reverseOrder:强行逆转比较器的自然顺序或元素的自然顺序。

2、 将集合由线程不安全转为线程安全的
synchronizedCollection(Collection<T>c)
synchronizedList(List<T>list)
synchronizedMap(Map<K,V>m)
synchronizedSet(Set<T>s)

其原理是:内部封装一个容器,然后定义一个锁,使用该锁同步并封装该容器的所有方法。

示例代码4

[java] view plaincopyprint?
  1. import java.util.*;
  2. class CollectionsDemo
  3. {
  4. public staticvoid main(String[] args)
  5. {
  6. sortDemo();
  7. }
  8. public staticvoid sortDemo()
  9. {
  10. List <String> list = new ArrayList<String>();
  11. list.add("abcdd");
  12. list.add("asdfas");
  13. list.add("saa");
  14. list.add("bbb");
  15. list.add("qt");
  16. list.add("bbb");
  17. sop(list);
  18. //排序演示,要排序的元素继承comparable类或者新建一个比较器。
  19. Collections.sort(list,new StrLenComparator());
  20. sop(list);
  21. sop("----------sort");
  22. //取最大值演示:要排序的元素继承comparable类或者新建一个比较器。
  23. String max = Collections.max(list,new StrLenComparator());
  24. sop(max);
  25. sop("----------max");
  26. //二分查找:必须先是有序集合,前后排序的比较规需要相同,是自然顺序都是自然顺序,是比较器都是比较器。
  27. int index = Collections.binarySearch(list,"kkkk");
  28. //int index = halfSearch(list,"aaaa");
  29. sop(index);
  30. sop("----------binarySearch");
  31. /*
  32. 我的问题:如果前边排序是用比较器,后来查找的时候没有加比较器,返回值如何?
  33. */
  34. //reverse:将集合中的元素反转。
  35. Collections.reverse(list);
  36. sop(list);
  37. sop("----------reverse");
  38. //swap():交换集合中两个元素的位置
  39. Collections.swap(list,2,5);
  40. sop(list);
  41. sop("----------swap");
  42. //shufle:使用默认随机源对指定列表进行置换(如洗牌动作、色子)
  43. Collections.shuffle(list);
  44. sop(list);
  45. sop("----------shuffle");
  46. //fill方法:可以将list集合中的所有元素替换成指定元素,
  47. //练习:将list集合中的部分元素替换成指定元素。
  48. sop(list);
  49. Collections.fill(list,"yyyy");
  50. sop(list);
  51. sop("----------fill");
  52. //repalceAll:将集合中的所有的指定元素替换成新元素
  53. Collections.replaceAll(list,"yyyy","00");//其实封装了list.set(index,"00");
  54. sop(list);
  55. sop("----------repalceAll");
  56. }
  57. //二分法原理。
  58. public staticint halfSearch(List<String> list,String key/*,Comparator cmp*/)
  59. {
  60. int max,min,mid;
  61. max =list.size()-1;
  62. min = 0;
  63. while(min<max)
  64. {
  65. mid =(max+min)>>1;
  66. String str = list.get(mid);
  67. int num = str.compareTo(key);//int num = cmp.compare(s1,s2);
  68. if(num>0)
  69. max =mid -1;
  70. else if(num<0)
  71. min =mid + 1;
  72. else
  73. return mid;
  74. }
  75. return min;//-min-1;
  76. }
  77. public staticvoid sop(Object obj)
  78. {
  79. System.out.println(obj);
  80. }
  81. }
  82. class StrLenComparatorimplements Comparator<String>
  83. {
  84. public int compare(String s1,String s2)
  85. {
  86. if(s1.length()>s2.length())
  87. return 1;
  88. if(s1.length()<s2.length())
  89. return -1;
  90. return s1.compareTo(s2);
  91. }
  92. }


示例代码5

[java] view plaincopyprint?
  1. *
  2. Collections.reverseOrder()命令:反转自然顺序或比较器
  3. */
  4. import java.util.*;
  5. class StrComparatorimplements Comparator<String>
  6. {
  7. public int compare(String s1,String s2)
  8. {
  9. /*int num =s1.compareTo(s2);
  10. if(num>0)
  11. return 1;
  12. if(num<0)
  13. return -1;
  14. return num;
  15. */
  16. return s2.compareTo(s1);
  17. }
  18. }
  19. class StrLenComparator implements Comparator<String>
  20. {
  21. public int compare(String s1,String s2)
  22. {
  23. if(s1.length()>s2.length())
  24. return 1;
  25. if(s1.length()<s2.length())
  26. return -1;
  27. return s1.compareTo(s2);
  28. }
  29. }
  30. class CollectionsDemo2
  31. {
  32. public staticvoid main(String[] args)
  33. {
  34. orderDemo();
  35. }
  36. public staticvoid orderDemo()
  37. {
  38. TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder(new StrLenComparator()));
  39. ts.add("adsdf");
  40. ts.add("afasdf");
  41. ts.add("efsf");
  42. ts.add("bc");
  43. ts.add("e");
  44. Iterator<String> it = ts.iterator();
  45. while(it.hasNext())
  46. {
  47. System.out.println(it.next());
  48. }
  49. }
  50. }


Arrays

数组工具类:

binarySearch:二分查找数组中的元素。
copyOf:复制数组
copyOfRange:复制数组内的某一段

equals:判断两个数组是否相等。

deeEquals:如果两个指定数组彼此是深层相等的,则返回true

deeHashCode:基于指定数组的深层内容返回哈希码。

deeToString: 返回指定数组深层内容的字符串表示形式。

fill:将指定的值分配给指定数组的每个元素。

hashCode:基于指定数组的内容返回哈希码。

sort: 对数组元素进行排序

toString:把数组的元素转化成字符串

重点Arrays有个asList(T… t)方法,可以把数组转换为List集合,它与Collection接口中的toArray一起,构成了数组API和集合API之间的桥梁。

CollectionToArray

示例代码6

[java] view plaincopyprint?
  1. /*
  2. 集合变数组。
  3. Collection接口中的toArray方法。
  4. */
  5. import java.util.*;
  6. class CollectionToArray
  7. {
  8. public staticvoid main(String[] args)
  9. {
  10. ArrayList<String >al = new ArrayList<String>();
  11. al.add("abc1");
  12. al.add("abc2");
  13. al.add("abc3");
  14. /*
  15. 1.指定类型的数组到底要定义多长?
  16. 当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组,数组的长度为集合的size
  17. 当指定类型的数组长度大于了集合的size,就不会新创建数组,而是用传递进来的数组。
  18. 所以创建一个刚刚好的数组最优。
  19. 2.为什么要将集合变数组?
  20. 为了限定对元素的操作。(如返回数据时,将数据变成数组)
  21. */
  22. String [] arr = al.toArray(new String[0]);
  23. System.out.println(Arrays.toString(arr));
  24. }
  25. }


ArrayToList

示例代码7

[java] view plaincopyprint?
  1. class ArraysDemo
  2. {
  3. public staticvoid main(String[] args)
  4. {
  5. // int[] arr =new int[]{2,5,7};
  6. // System.out.println(Arrays.toString(arr));
  7. String [] arr ={"abc","cc","kkk"};
  8. //把数组编程List集合有什么好处?
  9. /*
  10. 可以使用集合的思想和方法来操作数组中的元素。(如判断是否包含:如果是数组,需要进行循环判断))。否则需要自己封装多种方法。
  11. 注意:将数组变成集合,不可以使用集合的增删方法(add,remove),因为数组的长度是固定的。
  12. 如果增删了,那么会发生UnsupportedOperationException
  13. */
  14. List<String> list = Arrays.asList(arr);
  15. //list.add(0,"k");//UnsupportedOperationException
  16. System.out.println(list);
  17. int [] nums ={2,5,9};
  18. List<int[]> li = Arrays.asList(nums);
  19. /*
  20. 如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素。
  21. 如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存储。
  22. */
  23. sop(li);
  24. Integer [] nums1 ={2,5,9};
  25. List<Integer> lis = Arrays.asList(nums1);
  26. sop(lis);
  27. }
  28. public staticvoid sop(Object obj)
  29. {
  30. System.out.println(obj);
  31. }
  32. }


原创粉丝点击