黑马程序员_学习笔记框架(II)及工具类
2015-04-16 21:20
183 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!-------
Map集合
接口Map<K,V> 存入键值对。
Map集合特点:
该集合存储键值对,一对一对往里存,而且要保证键的唯一性。
Collection单列集合
Map双列集合
Map方法:
1, 添加
put()
putAll()
2, 删除
clear()
remove()
3, 判断
containsValue()
containsKey()
4, 获取
get()
size()
values()
entrySet()
keyset()
Map集合的子类:
|--Hashtable:底层是哈希表数据结构,不能存入null键null值,该集合是线程同步jdk1.0
|--HashMap:底层是哈希表数据结构,允许使用null键null值,该集合是不同步jdk1.2,效率高
|--TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序
和Set集合很像,其实Set底层使用了Map集合
Map集合的两种取出方式:
1、Set<k> keySet:将map中所有的键存入到Set集合,因为set集合具备迭代器,所以可以使用迭代取出所有键,获取每个键对应的值
Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
2、Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
而这个关系的数据类型就是:Map.Entry
Entry其实就是Map中的一个static内部接口。
为什么要定义在内部呢?
因为只有有了Map集合,有了键值对,才会有键值的映射关系。
关系属于Map集合中的一个内部事物。
而且该事物在直接访问Map集合中的元素。
Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口。
TreeMap
对象类要覆写equals(),hashCode(),实现接口Comparable
什么使用map集合呢?
当数据之间存在这映射关系时,就要先想map集合。
/*
练习:
"sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。
希望打印结果:a(1)c(2).....
通过结果发现,每一个字母都有对应的次数。
说明字母和次数之间都有映射关系。
注意了,当发现有映射关系时,可以选择map集合。
因为map集合中存放就是映射关系。
什么使用map集合呢?
当数据之间存在这映射关系时,就要先想map集合。
思路:
1,将字符串转换成字符数组。因为要对每一个字母进行操作。
2,定义一个map集合,因为打印结果的字母有顺序,所以使用treemap集合。
3,遍历字符数组。
将每一个字母作为键去查map集合。
如果返回null,将该字母和1存入到map集合中。
如果返回不是null,说明该字母在map集合已经存在并有对应次数。
那么就获取该次数并进行自增。,然后将该字母和自增后的次数存入到map集合中。覆盖调用原理键所对应的值。
4,将map集合中的数据变成指定的字符串形式返回。
思考:上面程序有一个局限性,当向字符串中出现“\n”,“\r”等特殊字符时,程序并不能读取其个数。
可以先将字符串中的所有“\”字符去除。
HashMap嵌套,在Map中嵌套HashMap或Collection。
Collections:框架工具类
Collections.reverseOrder()逆转排序
swap():置换列表元素
shuffle():将集合中元素重新随机排放
1、数组变集合
Arrays:用于操作数组的工具类
asList():将数组变成list集合
把数组变成list集合的好处:可以使用集合的思想来操作数组中的元素。
注意:将数组变成集合,不可以使用集合的增删方法(contains、get、indexOf、subList)
如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素。
如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
2、集合变数组
Collection的方法toArray()
1,指定类型的数组到底要定义多长呢?
当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size。
当指定类型的数组长度大于了集合的size,就不会新创建了数组。而是使用传递进来的数组。
所以创建一个刚刚好的数组最优。
2,为什么要将集合变数组?
为了限定对元素的操作。不需要进行增删了。
Map集合
接口Map<K,V> 存入键值对。
Map集合特点:
该集合存储键值对,一对一对往里存,而且要保证键的唯一性。
Collection单列集合
Map双列集合
Map方法:
1, 添加
put()
putAll()
2, 删除
clear()
remove()
3, 判断
containsValue()
containsKey()
4, 获取
get()
size()
values()
entrySet()
keyset()
Map集合的子类:
|--Hashtable:底层是哈希表数据结构,不能存入null键null值,该集合是线程同步jdk1.0
|--HashMap:底层是哈希表数据结构,允许使用null键null值,该集合是不同步jdk1.2,效率高
|--TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序
和Set集合很像,其实Set底层使用了Map集合
*/ import java.util.*; class MapDemo { public static void main(String[] args) { Map<String,String> map = new HashMap<String,String>(); //添加元素,添加元素,如果出现添加时,相同的键。那么后添加的值会覆盖原有键对应值。 //并put方法会返回被覆盖的值。 System.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); } }
Map集合的两种取出方式:
1、Set<k> keySet:将map中所有的键存入到Set集合,因为set集合具备迭代器,所以可以使用迭代取出所有键,获取每个键对应的值
Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
2、Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
而这个关系的数据类型就是:Map.Entry
Entry其实就是Map中的一个static内部接口。
为什么要定义在内部呢?
因为只有有了Map集合,有了键值对,才会有键值的映射关系。
关系属于Map集合中的一个内部事物。
而且该事物在直接访问Map集合中的元素。
*/ import java.util.*; 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); } /* //先获取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); } */ } } /*
Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口。
interface Map { public static interface Entry { public abstract Object getKey(); public abstract Object getValue(); } } class HashMap implements Map { class Hahs implements Map.Entry { public Object getKey(){} public Object getValue(){} } } */
TreeMap
对象类要覆写equals(),hashCode(),实现接口Comparable
什么使用map集合呢?
当数据之间存在这映射关系时,就要先想map集合。
/*
练习:
"sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。
希望打印结果:a(1)c(2).....
通过结果发现,每一个字母都有对应的次数。
说明字母和次数之间都有映射关系。
注意了,当发现有映射关系时,可以选择map集合。
因为map集合中存放就是映射关系。
什么使用map集合呢?
当数据之间存在这映射关系时,就要先想map集合。
思路:
1,将字符串转换成字符数组。因为要对每一个字母进行操作。
2,定义一个map集合,因为打印结果的字母有顺序,所以使用treemap集合。
3,遍历字符数组。
将每一个字母作为键去查map集合。
如果返回null,将该字母和1存入到map集合中。
如果返回不是null,说明该字母在map集合已经存在并有对应次数。
那么就获取该次数并进行自增。,然后将该字母和自增后的次数存入到map集合中。覆盖调用原理键所对应的值。
4,将map集合中的数据变成指定的字符串形式返回。
*/ import java.util.*; class MapTest3 { 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(); TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>(); int count = 0; for(int x=0; x<chs.length; x++) { if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z')) continue; Integer value = tm.get(chs[x]); if(value!=null) count = value; count++; tm.put(chs[x],count);//直接往集合中存储字符和数字,为什么可以,因为自动装箱。 count = 0; /* if(value==null) { tm.put(chs[x],1); } else { value = value + 1; tm.put(chs[x],value); } */ } //System.out.println(tm); StringBuilder sb = new StringBuilder(); Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet(); Iterator<Map.Entry<Character,Integer>> it = entrySet.iterator(); while(it.hasNext()) { Map.Entry<Character,Integer> me = it.next(); Character ch = me.getKey(); Integer value = me.getValue(); sb.append(ch+"("+value+")"); } return sb.toString(); } }
思考:上面程序有一个局限性,当向字符串中出现“\n”,“\r”等特殊字符时,程序并不能读取其个数。
可以先将字符串中的所有“\”字符去除。
HashMap嵌套,在Map中嵌套HashMap或Collection。
Collections:框架工具类
Collections.reverseOrder()逆转排序
swap():置换列表元素
shuffle():将集合中元素重新随机排放
1、数组变集合
Arrays:用于操作数组的工具类
asList():将数组变成list集合
把数组变成list集合的好处:可以使用集合的思想来操作数组中的元素。
注意:将数组变成集合,不可以使用集合的增删方法(contains、get、indexOf、subList)
如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素。
如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
2、集合变数组
Collection的方法toArray()
1,指定类型的数组到底要定义多长呢?
当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size。
当指定类型的数组长度大于了集合的size,就不会新创建了数组。而是使用传递进来的数组。
所以创建一个刚刚好的数组最优。
2,为什么要将集合变数组?
为了限定对元素的操作。不需要进行增删了。
相关文章推荐
- 黑马程序员--学习笔记(集合框架中的两个工具类,高级for循环,可变参数,静态导入)
- 黑马程序员-集合框架的学习笔记-2
- 黑马程序员-IOS学习笔记 Foundation框架下 NSString的常见方法
- 黑马程序员——IOS学习笔记(Foundation框架(一))
- Hibernate学习笔记一 使用idea开发工具搭建框架
- 黑马程序员-IOS学习笔记 Foundation框架下 NSArray的特点和常见方法
- 黑马程序员_学习笔记集合框架(I)
- 黑马程序员- IOS学习笔记-Foundation框架
- 黑马程序员- IOS学习笔记-Foundation框架集合类、NSNumber、NSDate
- 黑马程序员-IOS学习笔记 Foundation框架下 NSArray的方法 NSMutableArray的一些方法
- 黑马程序员——java学习笔记--集合框架
- 黑马程序员-java学习笔记-集合框架
- 黑马程序员---学习笔记24:Foundation框架
- 黑马程序员_java基础学习笔记06_集合框架
- [黑马程序员]15[Foundation框架] Foundation部分学习笔记小结
- 黑马程序员-OC学习笔记-----Foundation框架(集合、NSNumber、NSDate)
- 黑马程序员java学习笔记——集合框架
- 黑马程序员学习笔记 Java的三大框架
- 黑马程序员—Java学习笔记之集合框架(三)以及1.5新特性
- 黑马程序员 java学习笔记——集合框架2