12:集合map、工具类
一、map集合
方法简介:
1、添加 put(K key, V value) 以键值对的形式往里存
putAll(Map<? extends K,? extends V> m) 把一个map里的内容作为值存入进map中。
2、删除 clear() 清空集合
remove(Object key) 清楚其中的一条
3、判断 containsValue(Object value) 判断map中是否包含某个值
containsKey(Object key) 判断map中是否包含某个值
isEmpty()判空
4、获取 get(Object key) 根据key获取值
size() 获取map集合的大小
class MapDemo{public static void main(String[] args){Map<String,String> map = new HashMap<String,String>();//添加元素,添加元素,如果出现添加时,相同的键,那么后添加的值会覆盖原有键对应值,并返回以前的值,以前没值就放回nullSystem.out.println("put:"+map.put("01","zhangsan1"));System.out.println("put:"+map.put("01","wnagwu"));- map.put("02","zhangsan2");
map.put("03","zhangsan3");System.out.println("containsKey:"+map.containsKey("022")); 判断//System.out.println("remove:"+map.remove("02"));删除System.out.println("get:"+map.get("023"));map.put("04",null);System.out.println("get:"+map.get("04"));//可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断。//获取map集合中所有的值。Collection<String> coll = map.values();System.out.println(coll);System.out.println(map);}

class MapDemo2{public static void main(String[] args){Map<String,String> map = new HashMap<String,String>();// Map<Integer,String> map = new HashMap<Integer,String>();// map.put(8,"zhaoliu");map.put("02","zhangsan2");map.put("03","zhangsan3");map.put("01","zhangsan1");map.put("04","zhangsan4");//先获取map集合的所有键的Set集合,keySet();Set<String> keySet (故意起的,有意义)= map.keySet();//有了Set集合。就可以获取其迭代器。Iterator<String> it = keySet.iterator();while(it.hasNext()){String key = it.next();//有了键可以通过map集合的get方法获取其对应的值。String value = map.get(key);System.out.println("key:"+key+",value:"+value);}}}

class MapDemo2{public static void main(String[] args){Map<String,String> map = new HashMap<String,String>();map.put("02","zhangsan2");map.put("03","zhangsan3");map.put("01","zhangsan1");map.put("04","zhangsan4");//将Map集合中的映射关系取出。存入到Set集合中。Set<Map.Entry<String,String>> entrySet = map.entrySet();Iterator<Map.Entry<String,String>> it = entrySet.iterator();while(it.hasNext()){Map.Entry<String,String> me = it.next();String key = me.getKey();String value = me.getValue();System.out.println(key+":"+value);}}}



public class HashMapDemo {public static void main(String[] args) {/** 将学生对象和学生的归属地通过键与值存储到map集合中*/HashMap<Student,String> hm = new HashMap<Student,String>();hm.put(new Student("lisi",38),"北京");hm.put(new Student("zhaoliu",24),"上海");hm.put(new Student("xiaoqiang",31),"沈阳");hm.put(new Student("wangcai",28),"大连");hm.put(new Student("zhaoliu",24),"铁岭");? o1.getAge-o2.getAge:temp;}}
public class TreeMapDemo {public static void main(String[] args) {TreeMap<Student,String> tm = new TreeMap<Student,String>(new ComparatorByName());tm.put(new Student("lisi",38),"北京");tm.put(new Student("zhaoliu",24),"上海");tm.put(new Student("xiaoqiang",31),"沈阳");tm.put(new Student("wangcai",28),"大连");tm.put(new Student("zhaoliu",24),"铁岭");Iterator<Map.Entry<Student, String>> it = tm.entrySet().iterator();while(it.hasNext()){Map.Entry<Student,String> me = it.next();Student key = me.getKey();String value = me.getValue();System.out.println(key.getName()+":"+key.getAge()+"---"+value);}}}
public class LinkedHashMapDemo {public static void main(String[] args) {HashMap<Integer,String> hm = new LinkedHashMap<Integer,String>();hm.put(7, "zhouqi");hm.put(3, "zhangsan");hm.put(1, "qianyi");hm.put(5, "wangwu");Iterator<Map.Entry<Integer,String>> it = hm.entrySet().iterator();while(it.hasNext()){Map.Entry<Integer,String> me = it.next();Integer key = me.getKey();String value = me.getValue();System.out.println(key+":"+value);}}}
class MapTest1{public static void main(String[] args){String s= charCount("ak+abAf1c,dCkaAbc-defa"); //返回一个新的字符串结果System.out.println(s);}public static String charCount(String str){ //将字符串变成字符数组char[] chs = str.toCharArray();//定义map集合表。Map<Character,Integer> tm = new TreeMap<Character,Integer>();//因为只存取,不需要TreeMap的特有方法,将他提升为map就可以for(int x=0; x<chs.length; x++){if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z'))continue;//将数组中的字母作为键去查map表。Integer value = tm.get(chs[x]); //直接作为键去查表int count = 1; //计数器//判断值是否为null.if(value!=null){count = value+1; //用个变量记录下}// count++;map.put(chs[i], count);/* //这种比较麻烦if(value==null){map.put(chs[i], 1);}else{map.put(chs[i], value+1); //直接往集合中存储字符和数字,为什么可以,因为自动装箱}*/}}//System.out.println(tm);// 上边已经解决,转换它的那种结果a(2)b(1).return mapToString(map);}private static String mapToString(Map<Character, Integer> map) {StringBuilder sb = new StringBuilder();Iterator<Character> it = map.keySet().iterator();while(it.hasNext()){Character key = it.next();Integer value = map.get(key);sb.append(key+"("+value+")");}return sb.toString();}}
public class MapTest2 {public static void main(String[] args) {String week = getWeek(1); //查表System.out.println(week);System.out.println(getWeekByMap(week));}public static String getWeekByMap(String week){Map<String,String> map = new HashMap<String,String>();map.put("星期一","Mon");map.put("星期二","Tus");map.put("星期三","Wes");map.put("星期日","Sun");map.put("星期天","Sun");return map.get(week);}public static String getWeek(int week){if(week<1 || week>7)throw new RuntimeException("没有对应的星期,请您重新输入");String[] weeks = {"","星期一","星期二"};return weeks[week];}}
第二:Collections工具类
Collections和Collection有什么区别?
- Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。它有两个常用的子接口
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序。
- Collections ? o1.compareTo(o2) : temp;
}
}
- Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。它有两个常用的子接口
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序。
- Collections ? o1.compareTo(o2) : temp;
}
}
Set:不可以重复元素。无序。
- Collections ? o1.compareTo(o2) : temp;
}}

public static <T> void mySort(List<T> list,Comparator<? super T> comp){for (int i = 0; i < list.size()-1; i++) {for (int j = i+1; j < list.size(); j++) {if(comp.compare(list.get(i), list.get(j))>0){// T temp = list.get(i);// list.set(i, list.get(j));// list.set(j, temp);Collections.swap(list, i, j);}}}
public static <T extends Comparable<? super T>> void mySort(List<T> list){ 长度比较//<T extends Comparable<? super T>>需要限定,继承; i < list.size()-1; i++) {for (int j = i+1; j < list.size(); j++) {if(list.get(i).compareTo(list.get(j))>0){Collections.swap(list, i, j);public static void demo_2(){二分查找、最值List<String> list = new ArrayList<String>();list.add("abcde");list.add("cba");list.add("aa");list.add("zzz");list.add("cba");list.add("nbaa");// Collections.sort(list); 没顺序不能折半,先排序System.out.println(list);

// int index = Collections.binarySearch(list, "cba");// System.out.println("index="+index);//获取最大值。String max = Collections.max(list,new ComparatorByLength());//list,new ComparatorByLength()自然排序/排序器(名字长度)最值 demo_1System.out.println("max="+max);}
public static void demo_3() {/*用比较器逆序TreeSet<String> ts = new TreeSet<String>(new Comparator<String>(){public int compare(String o1, String o2) {int temp = o2.compareTo(o1);return temp;}});*/TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder(new ComparatorByLength()));ts.add("abc");ts.add("hahaha");ts.add("zzz");ts.add("aa");ts.add("cba");System.out.println(ts);}
public static void demo_4() {List<String> list = new ArrayList<String>();list.add("abcde");list.add("cba");list.add("zhangsan");list.add("zhaoliu");list.add("xiaoqiang");

这是俩步,一样



Collections.shuffle(list); (洗牌)// Collections.fill(list, "cc");System.out.println(list);}

List list = new ArrayList();//非同步的。list = MyCollections.synList(list);//返回一个同步的list.给非同步的集合加锁。class MyCollections{public static List synList(List list){return new MyList(list);}private class MyList implements List{private List list;private static final Object lock = new Object();MyList(List list){this.list = list;}在加元素的同时,删除元素public boolean add(Object obj){synchronized(lock){return list.add(obj);}}public boolean remove(Object obj){synchronized(lock){return list.remove(obj);}}}
public class ArraysDemo {tic void main(String[] args) {/** Arrays:集合框架的工具类。里面的方法都是静态的。**/// int[] arr = {3,1,5,6,3,6};// System.out.println(Arrays.toString(arr)); 输出为[3,1,5,6,3,6]}//toString的经典实现。public static String myToString(int[] a){int iMax = a.length - 1;if (iMax == -1)return "[]";StringBuilder b = new StringBuilder();b.append('[');for (int i = 0; ; i++) {//中间省略条件判断,提高了效率。b.append(a[i]);if (i == iMax)return b.append(']').toString();b.append(", ");}}
public static void demo_1() {/** 重点:List asList(数组)将数组转成集合。** 好处:其实可以使用集合的方法操作数组中的元素。* 注意:数组的长度是固定的,所以对于集合的增删方法是不可以使用的* 否则会发生UnsupportedOperationException**/String[] arr = {"abc","haha","xixi"};以前:比较麻烦boolean b = myContains(arr, "xixi");System.out.println("contains:"+b);public static boolean myContains(String[] arr,String key){for (int i = 0; i < arr.length; i++) {if(arr[i].equals(key))return true;}return false;}
List<String> list = Arrays.asList(arr);boolean b1 = list.contains("xixi");System.out.println("list contaisn:="+b1);// list.add("hiahia");//UnsupportedOperationExceptionSystem.out.println(list);}public static void demo_2() {/** 如果数组中的元素是对象,那么转成集合时,直接将数组中的元素作为集合中的元素进行集合存储。** 如果数组中的元素是基本类型数值,那么会将该数组作为集合中的元素进行存储。**/int(写成integer是对象)[] arr = {31,11,51,61};List<int[]> list = Arrays.asList(arr);System.out.println(list); 这里的集合中只有一个元素}

public class ToArray {public static void main(String[] args) {List<String> list = new ArrayList<String>();list.add("abc1");list.add("abc2");list.add("abc3");/** toArray方法需要传入一个指定类型的数组。* 长度该如何定义呢?* 如果长度小于集合的size,那么该方法会创建一个同类型并和集合相同size的数组。* 如果长度大于集合的size,那么该方法就会使用指定的数组,存储集合中的元素,其他位置默认为null。** 所以建议,最后长度就指定为,集合的size。*/String[] arr = list.toArray(new String[list.size()]); //字符串数组System.out.println(Arrays.toString(arr));}}
一个ArrayList对象alist中存有若干个字符串元素,现欲遍历该ArrayList对象,
int size = alist.size();for(int i = 0; i < size; i++) {if("abc".equals(alist.get(i))) {alist.remove(i);}}*/public class Test13 {public static void main(String[] args) {ArrayList<String> al = new ArrayList<String>();al.add("haha");al.add("abc");al.add("abc");al.add("abc");// int size = al.size();for(int x=0; x<al.size(); x++){if("abc".equals(al.get(x))){al.remove(x);x--;}}System.out.println(al);}}
12:集合map、工具类的更多相关文章
- JAVA基础学习之 Map集合、集合框架工具类Collections,Arrays、可变参数、List和Set集合框架什么时候使用等(4)
package com.itcast.test20140113; import java.util.ArrayList; import java.util.Arrays; import java.ut ...
- java 集合Collections 工具类:排序,查找替换。Set、List、Map 的of方法创建不可变集合
Collections 工具类 Java 提供1个操作 Set List Map 等集合的工具类 Collections ,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集合 ...
- Java中的集合Collections工具类(六)
操作集合的工具类Collections Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集 ...
- 操作集合的工具类:Collections
Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类提供了大量方法对集合进行排序.查询和修改等操作,还提供了将集合对象置为不可变.对集合对象实现同步控制等方法 ...
- 操作集合的工具类Collections
1 操作集合的工具类Collections Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操 ...
- Java集合----Collection工具类
Collections 工具类 Collections 是一个操作 Set.List 和 Map 等集合的工具类 Collections 中提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了 ...
- Java集合——Collections工具类
Java集合——Collections工具类 摘要:本文主要学习了Collections工具类的常用方法. 概述 Collections工具类主要用来操作集合类,比如List和Set. 常用操作 排序 ...
- java之操作集合的工具类--Collections
Collections是一个操作Set.List和Map等集合的工具类. Collections中提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了对集合对象设置不可变.对集合对象实现同步控 ...
- Java-集合第六篇操作集合的工具类Collections
1.Java提供了一个操作Set.List.Map等集合的工具类:Collections. 工具类中提供的方法主要针对Set.List.Map的排序.查询.修改等操作,以及将集合对象设置为不可变.对集 ...
- java基础37 集合框架工具类Collections和数组操作工具类Arrays
一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ...
随机推荐
- HTTP 中 GET 与 POST 的区别
最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. GET和POST是什么?HTTP协议中的两种发送请求的方法. HTTP是什么?HTTP是基于TCP/IP的关 ...
- CSS 表单
输入框前有图片 老板让你实现在输入框前有图片的功能.老板觉得用图片代替文字更有说服力. 要实现这样的功能很简单,它的原理是将图片放在内边距内. 代码 1 2 3 4 5 6 7 8 9 10 11 1 ...
- Django项目vue前端依赖框架过大,工程打开太卡的问题
前景提要:利用vue开发项目,由于依赖框架太大,导致pyCharm内存不够,项目打开太慢.步骤一:修改pyCharm的占用内存大小,按照下图操作.1.在应用程序中找到pyCharm,点击"显 ...
- TCP/UDP 常用端口列表
计算机之间依照互联网传输层TCP/IP协议不同的协议通信,都有不同的对应端口.所以,利用短信(datagram)的UDP,所采用的端口号码不一定和采用TCP的端口号码一样.以下为两种通信协议的端口列表 ...
- Secondary Indices
[Secondary Indices] EOSIO has the ability to sort tables by up to 16 indices. A table's struct cann ...
- db2 SQL6036N解决办法
问题背景: 数据库在进行大量的运算和数据处理的过程中,IO.CPU等资源消耗非常高的时候,强制停止数据库.db2stop force 结果数据库命令迟迟没有响应.这个时候对数据库进行其他操作均无响应, ...
- Spyder设置代码自动补全
1.spyder 代码自动补齐设置方式在tools->preferences->IPython console->advanced Settings 下面,把User the gre ...
- 微信公众号的分享接口,分享提示config:fail,invalid signature的解决办法(2017年12月)
微信中打开网页,使用微信右上角菜单中自带的分享功能的经历及总结: 最开始,微信分享页面时,直接读取页面的标题(title)和页面中的第一张符合条件的图片[此种方式在2017-03-29之前管用,这一天 ...
- Linux驱动之输入子系统简析
输入子系统由驱动层.输入子系统核心.事件处理层三部分组成.一个输入事件,如鼠标移动.键盘按下等通过Driver->Inputcore->Event handler->userspac ...
- JS-基础动画心得
写在前面的话:这两种动画方式主要在于对其中算法的理解,理解其中的向上和向下取整很关键.还有一个我犯的毛病,写样式的时候忘记给轮播图ul定位,导致效果出不来,所以有bug时记得排除下css 常用的三种动 ...