18. 集合类(Map、Collections)

来源:互联网 发布:iphone6蜂窝数据4g设置 编辑:程序博客网 时间:2024/05/16 03:34

1:Map(掌握)

       (1)将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

       (2)MapCollection的区别?

              A:Map          存储的是键值对形式的元素,键唯一,值可以重复。夫妻对

              B:Collection   存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。光棍

 * 注意:

 *          Map集合的数据结构值针对键有效,跟值无关      

 *                 HashMapTreeMap等会讲。

 *           Collection集合的数据结构是针对元素有效

      (3)Map接口功能概述

           1:添加功能

V put(Kkey,V value):添加元素。这个其实还有另一个功能?先不告诉你,等会讲

如果键是第一次存储,就直接存储元素,返回null

如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

          2:删除功能

                    voidclear():                         移除所有的键值对元素

                    Vremove(Object key):       根据键删除键值对元素,并把值返回

          3:判断功能

boolean containsKey(Objectkey):      判断集合是否包含指定的键

boolean containsValue(Objectvalue):   判断集合是否包含指定的值

boolean isEmpty():                          判断集合是否为空

public class MapDemo {       publicstatic void main(String[] args) {              //创建集合对象              Map<String,String> map = new HashMap<String, String>();              //添加元素              //V put(K key,V value):添加元素。这个其实还有另一个功能?先不告诉你,等会讲              //System.out.println("put:" + map.put("文章", "马伊俐"));              //System.out.println("put:" + map.put("文章", "姚笛"));              map.put("邓超", "孙俪");              map.put("黄晓明", "杨颖");              map.put("周杰伦", "蔡依林");              map.put("刘恺威", "杨幂");              //void clear():移除所有的键值对元素              //map.clear();              //V remove(Object key):根据键删除键值对元素,并把值返回              //System.out.println("remove:" + map.remove("黄晓明"));              //System.out.println("remove:" + map.remove("黄晓波"));              //boolean containsKey(Object key):判断集合是否包含指定的键              //System.out.println("containsKey:" + map.containsKey("黄晓明"));              //System.out.println("containsKey:" + map.containsKey("黄晓波"));              //boolean isEmpty():判断集合是否为空              //System.out.println("isEmpty:"+map.isEmpty());              //intsize():返回集合中的键值对的对数              System.out.println("size:"+map.size());              //输出集合名称              System.out.println("map:"+ map);       }}

4:获取功能

Set<Map.Entry<K,V>> entrySet():      返回的是键值对对象的集合

V get(Objectkey):                              根据键获取值

Set<K> keySet():                               获取集合中所有键的集合

Collection<V> values():                      获取集合中所有值的集合

public class MapDemo2 {   publicstatic void main(String[] args) {          //创建集合对象          Map<String,String> map = new HashMap<String, String>();          //创建元素并添加元素          map.put("邓超", "孙俪");          map.put("黄晓明", "杨颖");          map.put("周杰伦", "蔡依林");          map.put("刘恺威", "杨幂");          //V get(Object key):根据键获取值          System.out.println("get:"+ map.get("周杰伦"));          System.out.println("get:"+ map.get("周杰")); // 返回null          System.out.println("----------------------");           //Set<K> keySet():获取集合中所有键的集合          Set<String>set = map.keySet();          for(String key : set) {                 System.out.println(key);          }          System.out.println("----------------------");          //Collection<V> values():获取集合中所有值的集合          Collection<String>con = map.values();          for(String value : con) {                 System.out.println(value);          }   }}

5:长度功能

int size():                                        返回集合中的键值对的对数

      (4)Map集合的遍历

           A:键找值

                     a:获取所有键的集合

                     b:遍历键的集合,得到每一个键

                     c:根据键到集合中去找值

public class MapDemo3 {       publicstatic void main(String[] args) {              //创建集合对象              Map<String,String> map = new HashMap<String, String>();              //创建元素并添加到集合              map.put("杨过", "小龙女");              map.put("郭靖", "黄蓉");              map.put("杨康", "穆念慈");              map.put("陈玄风", "梅超风");              //遍历              //获取所有的键              Set<String>set = map.keySet();              //遍历键的集合,获取得到每一个键              for(String key : set) {                     //根据键去找值                     Stringvalue = map.get(key);                     System.out.println(key+ "---" + value);              }       }}

           B:键值对对象找键和值

                     a:获取所有的键值对对象的集合

                     b:遍历键值对对象的集合,获取每一个键值对对象

                     c:根据键值对对象去获取键和值

public class MapDemo4 {       publicstatic void main(String[] args) {              //创建集合对象              Map<String,String> map = new HashMap<String, String>();              //创建元素并添加到集合              map.put("杨过", "小龙女");              map.put("郭靖", "黄蓉");              map.put("杨康", "穆念慈");              map.put("陈玄风", "梅超风");              //获取所有键值对对象的集合              Set<Map.Entry<String,String>> set = map.entrySet();              //遍历键值对对象的集合,得到每一个键值对对象              for(Map.Entry<String, String> me : set) {                     //根据键值对对象获取键和值                     Stringkey = me.getKey();                     Stringvalue = me.getValue();                     System.out.println(key+ "---" + value);              }       }}

       (5)HashMap集合的练习

              A:HashMap<String,String>

public class HashMapDemo {       publicstatic void main(String[] args) {              //创建集合对象              HashMap<String,String> hm = new HashMap<String, String>();              //创建元素并添加元素              //String key1 = "it001";              //String value1 = "马云";              //hm.put(key1, value1);              hm.put("it001","马云");              hm.put("it003","马化腾");              hm.put("it004","乔布斯");              hm.put("it005","张朝阳");              hm.put("it002","裘伯君"); // wps              hm.put("it001","比尔盖茨");              //遍历              Set<String>set = hm.keySet();              for(String key : set) {                     Stringvalue = hm.get(key);                     System.out.println(key+ "---" + value);              }       }}

              B:HashMap<Integer,String>

public class HashMapDemo2 {   publicstatic void main(String[] args) {          //创建集合对象          HashMap<Integer,String> hm = new HashMap<Integer, String>();          //创建元素并添加元素          //Integer i = new Integer(27);          //Integer i = 27;          // String s = "林青霞";          // hm.put(i, s);          hm.put(27,"林青霞");          hm.put(30,"风清扬");          hm.put(28,"刘意");          hm.put(29,"林青霞");          //下面的写法是八进制,但是不能出现8以上的单个数据          //hm.put(003, "hello");          //hm.put(006, "hello");          //hm.put(007, "hello");          //hm.put(008, "hello");          //遍历          Set<Integer>set = hm.keySet();          for(Integer key : set) {                 Stringvalue = hm.get(key);                 System.out.println(key+ "---" + value);          }          //下面这种方式仅仅是集合的元素的字符串表示          //System.out.println("hm:" + hm);   }}

              C:HashMap<String,Student>

public class HashMapDemo3 {       publicstatic void main(String[] args) {              //创建集合对象              HashMap<String,Student> hm = new HashMap<String, Student>();              //创建学生对象              Students1 = new Student("周星驰",58);              Students2 = new Student("刘德华",55);              Students3 = new Student("梁朝伟",54);              Students4 = new Student("刘嘉玲",50);              //添加元素              hm.put("9527",s1);              hm.put("9522",s2);              hm.put("9524",s3);              hm.put("9529",s4);              //遍历              Set<String>set = hm.keySet();              for(String key : set) {                     //注意了:这次值不是字符串了                     //String value = hm.get(key);                     Studentvalue = hm.get(key);                     System.out.println(key+ "---" + value.getName() + "---" + value.getAge());              }       }}

              D:HashMap<Student,String>

public class HashMapDemo4 {   publicstatic void main(String[] args) {          //创建集合对象          HashMap<Student,String> hm = new HashMap<Student, String>();          //创建学生对象          Students1 = new Student("貂蝉",27);          Students2 = new Student("王昭君",30);          Students3 = new Student("西施",33);          Students4 = new Student("杨玉环",35);          Students5 = new Student("貂蝉",27);           //添加元素          hm.put(s1,"8888");          hm.put(s2,"6666");          hm.put(s3,"5555");          hm.put(s4,"7777");          hm.put(s5,"9999");          //遍历          Set<Student>set = hm.keySet();          for(Student key : set) {                 Stringvalue = hm.get(key);                 System.out.println(key.getName()+ "---" + key.getAge() + "---"+ value);          }   }}

public class Student {   privateString name;   privateint age;   publicStudent() {          super();   }   publicStudent(String name, int age) {          super();          this.name= name;          this.age= age;   }   publicString getName() {          retur nname;   }   publicvoid setName(String name) {          this.name= name;   }   publicint getAge() {          returnage;   }   publicvoid setAge(int age) {          this.age= age;   }   @Override   publicint hashCode() {          finalint prime = 31;          intresult = 1;          result= prime * result + age;          result= prime * result + ((name == null) ? 0 : name.hashCode());          return result;   }   @Override   publicboolean equals(Object obj) {          if(this == obj)                 return true;          if(obj == null)                 return false;          if(getClass() != obj.getClass())                 return false;          Studentother = (Student) obj;          if(age != other.age)                 return false;          if(name == null) {                 if(other.name != null)                        return false;          }else if (!name.equals(other.name))                 return false;          return true;   }}

(6)LinkedHashMap:Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。

 * 由哈希表保证键的唯一性

 * 由链表保证键盘的有序(存储和取出的顺序一致)

public class LinkedHashMapDemo {   publicstatic void main(String[] args) {          //创建集合对象          LinkedHashMap<String,String> hm = new LinkedHashMap<String, String>();          //创建并添加元素          hm.put("2345","hello");          hm.put("1234","world");          hm.put("3456","java");          hm.put("1234","javaee");          hm.put("3456","android");          //遍历          Set<String>set = hm.keySet();          for(String key : set) {                 Stringvalue = hm.get(key);                 System.out.println(key+ "---" + value);          }   }}

        (7)TreeMap(是基于红黑树的Map接口的实现)集合的练习         

              A:TreeMap<String,String>

public class TreeMapDemo {       publicstatic void main(String[] args) {              //创建集合对象              TreeMap<String,String> tm = new TreeMap<String, String>();              //创建元素并添加元素              tm.put("hello","你好");              tm.put("world","世界");              tm.put("java","爪哇");              tm.put("world","世界2");              tm.put("javaee","爪哇EE");              //遍历集合              Set<String>set = tm.keySet();              for(String key : set) {                     Stringvalue = tm.get(key);                     System.out.println(key+ "---" + value);              }       }}

              B:TreeMap<Student,String>

public class Student {   privateString name;   privateint age;   publicStudent() {          super();   }   publicStudent(String name, int age) {          super();          this.name= name;          this.age= age;   }   publicString getName() {          returnname;   }   publicvoid setName(String name) {          this.name= name;   }   publicint getAge() {          returnage;   }   publicvoid setAge(int age) {          this.age= age;   }}

public class TreeMapDemo2 {       publicstatic void main(String[] args) {              //创建集合对象              TreeMap<Student,String> tm = new TreeMap<Student, String>(                            newComparator<Student>() {                                   @Override                                   publicint compare(Student s1, Student s2) {                                          //主要条件                                          intnum = s1.getAge() - s2.getAge();                                          //次要条件                                          intnum2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;                                          returnnum2;                                   }                            });              //创建学生对象              Students1 = new Student("潘安",30);              Student s2 = new Student("柳下惠", 35);              Students3 = new Student("唐伯虎",33);              Students4 = new Student("燕青",32);              Students5 = new Student("唐伯虎",33);              //存储元素              tm.put(s1,"宋朝");              tm.put(s2,"元朝");              tm.put(s3,"明朝");              tm.put(s4,"清朝");              tm.put(s5,"汉朝");              //遍历              Set<Student>set = tm.keySet();              for(Student key : set) {                     Stringvalue = tm.get(key);                     System.out.println(key.getName()+ "---" + key.getAge() + "---"+ value);              }       }}

8)面试题:HashtableHashMap的区别?

      Hashtable:      线程安全,效率低。不允许null键和null

HashMap:       线程不安全,效率高。允许null键和null

9)面试题:List,Set,Map等接口是否都继承子Map接口?

      ListSet不是继承自Map接口,它们继承自Collection接口

Map接口本身就是一个顶层接口

public class HashtableDemo {   publicstatic void main(String[] args) {          //HashMap<String, String> hm = new HashMap<String, String>();          Hashtable<String,String> hm = new Hashtable<String, String>();          hm.put("it001","hello");          //hm.put(null, "world"); //NullPointerException          //hm.put("java", null); // NullPointerException          System.out.println(hm);   }}

(10)案例(掌握)

              A:统计一个字符串中每个字符出现的次数

 * 需求 :"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)

 * 分析:

 *             A:定义一个字符串(可以改进为键盘录入)

 *             B:定义一个TreeMap集合

 *                    键:Character

 *                    值:Integer

 *             C:把字符串转换为字符数组

 *             D:遍历字符数组,得到每一个字符

 *             E:拿刚才得到的字符作为键到集合中去找值,看返回值

 *                    是null:说明该键不存在,就把该字符作为键,1作为值存储

 *                    不是null:说明该键存在,就把值加1,然后重写存储该键和值

 *             F:定义字符串缓冲区变量

 *             G:遍历集合,得到键和值,进行按照要求拼接

 *             H:把字符串缓冲区转换为字符串输出

 * 录入:linqingxia

 * 结果:result:a(1)g(1)i(3)l(1)n(2)q(1)x(1)

public class TreeMapDemo {   publicstatic void main(String[] args) {          //定义一个字符串(可以改进为键盘录入)          Scannersc = new Scanner(System.in);          System.out.println("请输入一个字符串:");          Stringline = sc.nextLine();          //定义一个TreeMap集合          TreeMap<Character,Integer> tm = new TreeMap<Character, Integer>();          //把字符串转换为字符数组          char[]chs = line.toCharArray();          //遍历字符数组,得到每一个字符          for(charch : chs){                 //拿刚才得到的字符作为键到集合中去找值,看返回值                 Integeri =  tm.get(ch);                        //是null:说明该键不存在,就把该字符作为键,1作为值存储                 if(i== null){                        tm.put(ch,1);                 }else{                        //不是null:说明该键存在,就把值加1,然后重写存储该键和值                        i++;                        tm.put(ch,i);                 }          }          //定义字符串缓冲区变量          StringBuildersb=  new StringBuilder();          //遍历集合,得到键和值,进行按照要求拼接          Set<Character>set = tm.keySet();          for(Characterkey : set){                 Integervalue = tm.get(key);                 sb.append(key).append("(").append(value).append(")");          }          //把字符串缓冲区转换为字符串输出          Stringresult = sb.toString();          System.out.println("result:"+result);   }}

              B:集合的嵌套遍历

                     a:HashMap嵌套HashMap

 *          jc     基础班

 *                        陈玉楼           20

 *                        高跃              22

 *          jy    就业班

 *                        李杰              21

 *                        曹石磊           23

 * 先存储元素,然后遍历元素

publicclass HashMapDemo2 {       public static void main(String[] args) {       // 创建集合对象              HashMap<String,HashMap<String, Integer>> czbkMap = new HashMap<String,HashMap<String, Integer>>();       // 创建基础班集合对象              HashMap<String, Integer>jcMap = new HashMap<String, Integer>();        // 添加元素              jcMap.put("陈玉楼", 20);              jcMap.put("高跃", 22);        // 把基础班添加到大集合              czbkMap.put("jc",jcMap);        // 创建就业班集合对象              HashMap<String, Integer>jyMap = new HashMap<String, Integer>();        // 添加元素              jyMap.put("李杰", 21);              jyMap.put("曹石磊", 23);               // 把就业班添加到大集合              czbkMap.put("jy",jyMap);        //遍历集合              Set<String> czbkMapSet =czbkMap.keySet();               for(String czbkMapKey :czbkMapSet){                     System.out.println(czbkMapKey);                     HashMap<String,Integer> czbkMapValue = czbkMap.get(czbkMapKey);                      Set<String>czbkMapValueSet = czbkMapValue.keySet();                      for(String czbkMapValueKey: czbkMapValueSet){                            IntegerczbkMapValueValue = czbkMapValue.get(czbkMapValueKey);                            System.out.println("\t"+czbkMapValueKey+"---"+czbkMapValueValue);                     }              }       }}

                     b:HashMap嵌套ArrayList

 *需求:

 *假设HashMap集合的元素是ArrayList。有3个。

 *每一个ArrayList集合的值是字符串。

 *元素我已经完成,请遍历。

 *结果:

 *           三国演义

 *                吕布

 *                周瑜

 *           笑傲江湖

 *                令狐冲

 *                林平之

 *           神雕侠侣

 *                郭靖

 *                杨过 

public class HashMapIncludeArrayListDemo{       publicstatic void main(String[] args) {              //创建集合对象              HashMap<String,ArrayList<String>> hm = new HashMap<String,ArrayList<String>>();              //创建元素集合1              ArrayList<String>array1 = new ArrayList<String>();              array1.add("吕布");              array1.add("周瑜");              hm.put("三国演义", array1);              //创建元素集合2              ArrayList<String>array2 = new ArrayList<String>();              array2.add("令狐冲");              array2.add("林平之");              hm.put("笑傲江湖", array2);              //创建元素集合3              ArrayList<String>array3 = new ArrayList<String>();              array3.add("郭靖");              array3.add("杨过");              hm.put("神雕侠侣", array3);               //遍历集合              Set<String>set = hm.keySet();              for(Stringkey : set){                     System.out.println(key);                     ArrayList<String>value = hm.get(key);                     for(Strings : value){                            System.out.println("\t"+s);                     }              }       }}

                     c:ArrayList嵌套HashMap

需求:

 假设ArrayList集合的元素是HashMap。有3个。

 每一个HashMap集合的键和值都是字符串。

 元素我已经完成,请遍历。

 结果:

 周瑜---小乔

 吕布---貂蝉

 郭靖---黄蓉

 杨过---小龙女

 令狐冲---任盈盈

 林平之---岳灵珊

public classArrayListIncludeHashMapDemo {       publicstatic void main(String[] args) {              //创建集合对象              ArrayList<HashMap<String,String>> array = new ArrayList<HashMap<String, String>>();              //创建元素1              HashMap<String,String> hm1 = new HashMap<String, String>();              hm1.put("周瑜", "小乔");              hm1.put("吕布", "貂蝉");              //把元素添加到array里面              array.add(hm1);              //创建元素1              HashMap<String,String> hm2 = new HashMap<String, String>();              hm2.put("郭靖", "黄蓉");              hm2.put("杨过", "小龙女");              //把元素添加到array里面              array.add(hm2);              //创建元素1              HashMap<String,String> hm3 = new HashMap<String, String>();              hm3.put("令狐冲", "任盈盈");              hm3.put("林平之", "岳灵珊");              //把元素添加到array里面              array.add(hm3);              //遍历              for(HashMap<String, String> hm : array) {                     Set<String>set = hm.keySet();                     for(String key : set) {                            Stringvalue = hm.get(key);                            System.out.println(key+ "---" + value);                     }              }       }}

                     d:多层嵌套

 * 为了更符合要求:

 *          这次的数据就看成是学生对象。

 *          bj    北京校区

 *                 jc     基础班

 *                               林青霞           27

 *                               风清扬           30

 *                 jy    就业班   

 *                               赵雅芝           28

 *                               武鑫              29

 *          sh    上海校区

 *                 jc     基础班

 *                               郭美美           20

 *                               犀利哥           22

 *                 jy    就业班   

 *                               罗玉凤           21

 *                               马征              23

 *          gz    广州校区

 *                 jc     基础班

 *                               王力宏           30

 *                               李静磊           32

 *                 jy    就业班   

 *                               郎朗              31

 *                               柳岩              33

 *          xa    西安校区

 *                 jc     基础班

 *                               范冰冰           27

 *                               刘意              30

 *                 jy    就业班   

 *                               李冰冰           28

 *                               张志豪           29

publicclass HashMapDemo {       public static void main(String[] args) {              // 创建大集合              HashMap<String,HashMap<String, ArrayList<Student>>> czbkMap = newHashMap<String, HashMap<String, ArrayList<Student>>>();              // 北京校区数据              HashMap<String,ArrayList<Student>> bjCzbkMap = new HashMap<String,ArrayList<Student>>();              ArrayList<Student> array1 =new ArrayList<Student>();              Student s1 = new Student("林青霞", 27);              Student s2 = new Student("风清扬", 30);              array1.add(s1);              array1.add(s2);              ArrayList<Student> array2 =new ArrayList<Student>();              Student s3 = new Student("赵雅芝", 28);              Student s4 = new Student("武鑫", 29);              array2.add(s3);              array2.add(s4);              bjCzbkMap.put("基础班", array1);              bjCzbkMap.put("就业班", array2);              czbkMap.put("北京校区", bjCzbkMap);              // 晚上可以自己练习一下              // 上海校区数据自己做              // 广州校区数据自己做              // 西安校区数据              HashMap<String,ArrayList<Student>> xaCzbkMap = new HashMap<String,ArrayList<Student>>();              ArrayList<Student> array3 =new ArrayList<Student>();              Student s5 = new Student("范冰冰", 27);              Student s6 = new Student("刘意", 30);              array3.add(s5);              array3.add(s6);              ArrayList<Student> array4 =new ArrayList<Student>();              Student s7 = new Student("李冰冰", 28);              Student s8 = new Student("张志豪", 29);              array4.add(s7);              array4.add(s8);              xaCzbkMap.put("基础班", array3);              xaCzbkMap.put("就业班", array4);              czbkMap.put("西安校区", xaCzbkMap);              // 遍历集合              Set<String> czbkMapSet =czbkMap.keySet();              for (String czbkMapKey :czbkMapSet) {                     System.out.println(czbkMapKey);                     HashMap<String,ArrayList<Student>> czbkMapValue = czbkMap.get(czbkMapKey);                     Set<String>czbkMapValueSet = czbkMapValue.keySet();                     for (String czbkMapValueKey: czbkMapValueSet) {                            System.out.println("\t"+ czbkMapValueKey);                            ArrayList<Student>czbkMapValueValue = czbkMapValue.get(czbkMapValueKey);                            for (Student s :czbkMapValueValue) {                                   System.out.println("\t\t"+ s.getName() + "---"+ s.getAge());                            }                     }              }       }}

public class Student {       privateString name;       privateint age;       publicStudent() {              super();       }       publicStudent(String name, int age) {              super();              this.name= name;              this.age= age;       }       publicString getName() {              return name;       }       publicvoid setName(String name) {              this.name= name;       }       publicint getAge() {              return age;       }       publicvoid setAge(int age) {              this.age= age;       }}

2:Collections是类、Collection是接口(理解) 

       (1) Collections:是针对集合进行操作的工具类,都是静态方法。

      (2)面试题:CollectionCollections的区别

              A:Collection是单列集合的顶层接口,有两个子接口ListSet

              B:Collections是针对集合进行操作的工具类,可以对集合进行排序和查找等

(3)常见的几个小方法:

              public static <T> void sort(List<T> list):                        排序 默认情况下是自然顺序。

 * Collections可以针对ArrayList存储基本包装类的元素排序,存储自定义对象可不可以排序呢?

public class CollectionsDemo {       publicstatic void main(String[] args) {              //创建集合对象              List<Student>list = new ArrayList<Student>();              //创建学生对象              Students1 = new Student("林青霞",27);              Students2 = new Student("风清扬",30);              Students3 = new Student("刘晓曲",28);              Students4 = new Student("武鑫",29);              Students5 = new Student("林青霞",27);              //添加元素对象              list.add(s1);              list.add(s2);              list.add(s3);              list.add(s4);              list.add(s5);              //排序              //自然排序              //Collections.sort(list);              //比较器排序              //如果同时有自然排序和比较器排序,以比较器排序为主              Collections.sort(list,new Comparator<Student>() {                     @Override                     publicint compare(Student s1, Student s2) {                            intnum = s2.getAge() - s1.getAge();                            intnum2 = num == 0 ? s1.getName().compareTo(s2.getName()): num;                            returnnum2;                     }              });              //遍历集合              for(Student s : list) {                     System.out.println(s.getName()+ "---" + s.getAge());              }       }}


public static <T> int binarySearch(List<?> list,T key):        二分查找

public static <T> T max(Collection<?> coll):                     最大值

public static void reverse(List<?> list):                              反转

public static void shuffle(List<?> list):                              随机置换

public class CollectionsDemo {       publicstatic void main(String[] args) {              // 创建集合对象              List<Integer>list = new ArrayList<Integer>();              // 添加元素              list.add(30);              list.add(20);              list.add(50);              list.add(10);              list.add(40);              System.out.println("list:"+ list);              // public static <T> void sort(List<T>list):排序默认情况下是自然顺序。              //Collections.sort(list);              //System.out.println("list:" + list);              //[10, 20, 30, 40, 50]              // public static <T> int binarySearch(List<?>list,T key):二分查找              //System.out              //.println("binarySearch:" + Collections.binarySearch(list, 30));              //System.out.println("binarySearch:"              //+ Collections.binarySearch(list, 300));              // public static <T> T max(Collection<?>coll):最大值              //System.out.println("max:"+Collections.max(list));              // public static void reverse(List<?> list):反转              //Collections.reverse(list);              //System.out.println("list:" + list);              //public staticvoid shuffle(List<?> list):随机置换              Collections.shuffle(list);              System.out.println("list:"+ list);       }}

(4)案例

              A:ArrayList集合存储自定义对象的排序

              B:模拟斗地主装牌洗牌

 * 模拟斗地主洗牌和发牌

 *

 * 分析:

 *          A:创建一个牌盒

 *          B:装牌

 *          C:洗牌

 *          D:发牌

 *          E:看牌

public class PokerDemo {       publicstatic void main(String[] args) {              //创建一个牌盒              ArrayList<String>array = new ArrayList<String>();              //装牌              //黑桃A,黑桃2,黑桃3,...黑桃K              //红桃A,...              //梅花A,...              //方块A,...              //定义一个花色数组              String[]colors = { "♠", "♥", "♣","♦" };              //定义一个点数数组              String[]numbers = { "A", "2", "3", "4","5", "6", "7", "8", "9","10","J", "Q", "K" };              //装牌              for(String color : colors) {                     for(String number : numbers) {                            array.add(color.concat(number));                     }              }              array.add("小王");              array.add("大王");              //洗牌              Collections.shuffle(array);              //System.out.println("array:" + array);              //发牌              ArrayList<String>fengQingYang = new ArrayList<String>();              ArrayList<String>linQingXia = new ArrayList<String>();              ArrayList<String>liuYi = new ArrayList<String>();              ArrayList<String>diPai = new ArrayList<String>();              for(int x = 0; x < array.size(); x++) {                     if(x >= array.size() - 3) {                            diPai.add(array.get(x));                     }else if (x % 3 == 0) {                            fengQingYang.add(array.get(x));                     } else if (x % 3 == 1) {                            linQingXia.add(array.get(x));                     }else if (x % 3 == 2) {                            liuYi.add(array.get(x));                     }              }              //看牌              lookPoker("风清扬", fengQingYang);              lookPoker("林青霞", linQingXia);              lookPoker("刘意", liuYi);              lookPoker("底牌", diPai);       }       publicstatic void lookPoker(String name, ArrayList<String> array) {              System.out.print(name+ "的牌是:");              for(String s : array) {                     System.out.print(s+ " ");              }              System.out.println();       }}

              C:模拟斗地主发牌和看牌并对牌进行排序

 * 思路:

 *          A:创建一个HashMap集合

 *          B:创建一个ArrayList集合

 *          C:创建花色数组和点数数组

 *          D:从0开始往HashMap里面存储编号,并存储对应的牌

 *        同时往ArrayList里面存储编号即可。

 *     E:洗牌(洗的是编号)

 *     F:发牌(发的也是编号,为了保证编号是排序的,就创建TreeSet集合接收)

 *     G:看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)

public class PokerDemo {       publicstatic void main(String[] args) {              //创建一个HashMap集合              HashMap<Integer,String> hm = new HashMap<Integer, String>();              //创建一个ArrayList集合              ArrayList<Integer>array = new ArrayList<Integer>();              //创建花色数组和点数数组              //定义一个花色数组              String[]colors = { "♠", "♥", "♣","♦" };              //定义一个点数数组              String[]numbers = { "3", "4", "5", "6","7", "8", "9", "10", "J","Q","K", "A", "2", };// 从0开始往HashMap里面存储编号,并存储对应的牌,同时往ArrayList里面存储编号即可。              intindex = 0;              for(String number : numbers) {                     for(String color : colors) {                            Stringpoker = color.concat(number);                            hm.put(index,poker);                            array.add(index);                            index++;                     }              }              hm.put(index,"小王");              array.add(index);              index++;              hm.put(index,"大王");              array.add(index);              //洗牌(洗的是编号)              Collections.shuffle(array);              //发牌(发的也是编号,为了保证编号是排序的,就创建TreeSet集合接收)              TreeSet<Integer>fengQingYang = new TreeSet<Integer>();              TreeSet<Integer>linQingXia = new TreeSet<Integer>();              TreeSet<Integer>liuYi = new TreeSet<Integer>();              TreeSet<Integer>diPai = new TreeSet<Integer>();              for(int x = 0; x < array.size(); x++) {                     if(x >= array.size() - 3) {                            diPai.add(array.get(x));                     }else if (x % 3 == 0) {                            fengQingYang.add(array.get(x));                     }else if (x % 3 == 1) {                            linQingXia.add(array.get(x));                     }else if (x % 3 == 2) {                            liuYi.add(array.get(x));                     }              }              //看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)              lookPoker("风清扬", fengQingYang, hm);              lookPoker("林青霞", linQingXia, hm);              lookPoker("刘意", liuYi, hm);              lookPoker("底牌", diPai, hm);       }       //写看牌的功能       publicstatic void lookPoker(String name, TreeSet<Integer> ts,                     HashMap<Integer,String> hm) {              System.out.print(name+ "的牌是:");              for(Integer key : ts) {                     Stringvalue = hm.get(key);                     System.out.print(value+ " ");              }              System.out.println();       }}

阅读全文
0 0