D18

来源:互联网 发布:linux java mysqldump 编辑:程序博客网 时间:2024/06/01 08:37

1、获取功能

键找值public static 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("周杰")); // 返回nullSystem.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);}}

根据键值对对象获取键和值public static 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) {// 根据键值对对象获取键和值String key = me.getKey();String value = me.getValue();System.out.println(key + "---" + value);}}
<pre name="code" class="java"><pre name="code" class="java">根据键值对对象获取键和值----------------------public static void main(String[] args) {// 创建集合对象HashMap<String, Student> hm = new HashMap<String, Student>();// 创建学生对象Student s1 = new Student("周星驰", 58);Student s2 = new Student("刘德华", 55);Student s3 = new Student("梁朝伟", 54);Student s4 = 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);Student value = hm.get(key);System.out.println(key + "---" + value.getName() + "---"+ value.getAge());}}


/* * HashMap:是基于哈希表的Map接口实现。 * 哈希表的作用是用来保证键的唯一性的。 *  * HashMap<String,String> * 键:String * 值:String */public static 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", "裘伯君"); // wpshm.put("it001", "比尔盖茨");// 遍历Set<String> set = hm.keySet();for (String key : set) {String value = hm.get(key);System.out.println(key + "---" + value);}}
* * LinkedHashMap:是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。 * 由哈希表保证键的唯一性 * 由链表保证键盘的有序(存储和取出的顺序一致) */public static 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) {String value = hm.get(key);System.out.println(key + "---" + value);}}
/* * TreeMap:是基于红黑树的Map接口的实现。 *  * HashMap<String,String> * 键:String * 值:String */public static 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) {String value = tm.get(key);System.out.println(key + "---" + value);}}
<pre name="code" class="java">public static void main(String[] args) {// 创建集合对象TreeMap<Student, String> tm = new TreeMap<Student, String>(new Comparator<Student>() {@Overridepublic int compare(Student s1, Student s2) {// 主要条件int num = s1.getAge() - s2.getAge();// 次要条件int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;return num2;}});// 创建学生对象Student s1 = new Student("潘安", 30);Student s2 = new Student("柳下惠", 35);Student s3 = new Student("唐伯虎", 33);Student s4 = new Student("燕青", 32);Student s5 = 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) {String value = tm.get(key);System.out.println(key.getName() + "---" + key.getAge() + "---"+ value);}}

嵌套集合public static void main(String[] args) {// 创建集合对象HashMap<String, ArrayList<String>> hm = new HashMap<String, ArrayList<String>>();// 创建元素集合1ArrayList<String> array1 = new ArrayList<String>();array1.add("吕布");array1.add("周瑜");hm.put("三国演义", array1);// 创建元素集合2ArrayList<String> array2 = new ArrayList<String>();array2.add("令狐冲");array2.add("林平之");hm.put("笑傲江湖", array2);// 创建元素集合3ArrayList<String> array3 = new ArrayList<String>();array3.add("郭靖");array3.add("杨过");hm.put("神雕侠侣", array3);//遍历集合Set<String> set = hm.keySet();for(String key : set){System.out.println(key);ArrayList<String> value = hm.get(key);for(String s : value){System.out.println("\t"+s);}}}
需求 :"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)public static void main(String[] args) {// 定义一个字符串(可以改进为键盘录入)Scanner sc = new Scanner(System.in);System.out.println("请输入一个字符串:");String line = sc.nextLine();// 定义一个TreeMap集合TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();//把字符串转换为字符数组char[] chs = line.toCharArray();//遍历字符数组,得到每一个字符for(char ch : chs){//拿刚才得到的字符作为键到集合中去找值,看返回值Integer i =  tm.get(ch);//是null:说明该键不存在,就把该字符作为键,1作为值存储if(i == null){tm.put(ch, 1);}else {//不是null:说明该键存在,就把值加1,然后重写存储该键和值i++;tm.put(ch,i);}}//定义字符串缓冲区变量StringBuilder sb=  new StringBuilder();//遍历集合,得到键和值,进行按照要求拼接Set<Character> set = tm.keySet();for(Character key : set){Integer value = tm.get(key);sb.append(key).append("(").append(value).append(")");}//把字符串缓冲区转换为字符串输出String result = sb.toString();System.out.println("result:"+result);}

2、 1:Hashtable和HashMap的区别?
 Hashtable:线程安全,效率低。不允许null键和null值
 HashMap:线程不安全,效率高。允许null键和null值

 3、 List,Set,Map等接口是否都继承子Map接口?
  List,Set不是继承自Map接口,它们继承自Collection接口
 Map接口本身就是一个顶层接口

4、Collection和Collections的区别?
Collection:是单列集合的顶层接口,有子接口List和Set。

Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法


5、Collections可以针对ArrayList存储基本包装类的元素排序,存储自定义对象可不可以排序呢public static void main(String[] args) {// 创建集合对象List<Student> list = new ArrayList<Student>();// 创建学生对象Student s1 = new Student("林青霞", 27);Student s2 = new Student("风清扬", 30);Student s3 = new Student("刘晓曲", 28);Student s4 = new Student("范冰冰", 29);Student s5 = 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>() {@Overridepublic int compare(Student s1, Student s2) {int num = s2.getAge() - s1.getAge();int num2 = num == 0 ? s1.getName().compareTo(s2.getName()): num;return num2;}});// 遍历集合for (Student s : list) {System.out.println(s.getName() + "---" + s.getAge());}}

/* * 模拟斗地主洗牌和发牌 *  * 分析: * A:创建一个牌盒 * B:装牌 * C:洗牌 * D:发牌 * E:看牌 * 思路: * A:创建一个HashMap集合 * B:创建一个ArrayList集合 * C:创建花色数组和点数数组 * D:从0开始往HashMap里面存储编号,并存储对应的牌 *        同时往ArrayList里面存储编号即可。 *      E:洗牌(洗的是编号) *      F:发牌(发的也是编号,为了保证编号是排序的,就创建TreeSet集合接收) *      G:看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌) */<pre name="code" class="java">public class DouDiZhu {public static void main(String[] args) {// 装牌集合HashMap<Integer, String> mp = new HashMap<Integer, String>();// 装序号ArrayList<Integer> list = new ArrayList<Integer>();// 装花色String[] colors = { "♦", "♣", "♥", "♠" };// 装点数String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q","K", "A", "2", };// 发牌集合TreeSet<Integer> al1 = new TreeSet<Integer>();TreeSet<Integer> al2 = new TreeSet<Integer>();TreeSet<Integer> al3 = new TreeSet<Integer>();TreeSet<Integer> al4 = new TreeSet<Integer>();// 装牌int index = 0;for (String num : numbers) {for (String col : colors) {mp.put(index, col.concat(num));list.add(index);index++;}}mp.put(index, "小王");list.add(index);index++;mp.put(index, "大王");list.add(index);// 洗牌Collections.shuffle(list);// 发牌for (int i = 0; i < list.size(); i++) {if (i < list.size() - 3) {if (i % 3 == 0) {al1.add(list.get(i));} else if (i % 3 == 1) {al2.add(list.get(i));} else if (i % 3 == 2) {al3.add(list.get(i));}} else {al4.add(list.get(i));}}//看牌System.out.println(looks("刘备",al1,mp));System.out.println(looks("关羽",al2,mp));System.out.println(looks("张飞",al3,mp));System.out.println(looks("底牌",al4,mp));}//看牌方法public static String looks(String str,TreeSet<Integer> set,HashMap<Integer,String> hm){StringBuilder sb=new StringBuilder(str+":{");for(Integer st:set){sb.append(hm.get(st));sb.append(" ");}sb.append("}");return sb.toString();}}







0 0
原创粉丝点击