黑马程序员 Java基础知识总结-j集合框架
2014-03-26 21:41
831 查看
集合的特点:1、用于存储对象的容器。2、集合的长度是可变的。3、集合中部可以存储基本数据类型。由于集合容器内不得数据结构不同,有多种集体的容器不断的向上抽取,就形成了集合框架。
下面是Java中集合框架简图:
上图中可以看到,Collection接口有两个子接口List和Set。
Collection接口提供对元素的方法有添加、删除、判断、获取、其他(比如说;取交集,将集合装换成数组)。
List接口的特点是,可以操作脚标,数组元素可以重复,按照集合元素添加的顺序,通常对数据有添加、删除、修改、获取
|--List:元素是有序的,元素可以重复。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度快,但是增删稍慢,线程不同步。
|--LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢,线程不同步。
|--Vector:底层是数组结构,线程同步,被ArrayList替代了,因为效率低。
|--Set:元素是无序的(存入和取出的顺序不一定一致),元素不可以重复。
|--HashSet:底层数据结构是哈希表,是线程不安全的,不同步。HashSet是如何保证元素的唯一性的呢?是通过元素的两个方法,hashCode和equals来完成。如果元素的hashCode值相同,才会判断equals是否为true。如果元素的hashCode值不同,不会调用equals。对于判断元素是否存在,以及删除等操作依赖的方法是元素的hashCode和equals方法。
|--TreeSet:可以对Set集合中的元素进行排序,底层数据结构是二叉树。它保证元素唯一性的依据是compareTo方法的return。TreeSet排序的第一种方式:让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法,这种方式称为元素的自然顺序,也叫默认顺序。TreeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是 所需的,这是就需要让集合自身具备比较性,在集合初始化时就让其具有比较性方式。
Collection接口系列的集合均可以用迭代器取出元素。
Map集合:
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
|--Ha shMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
Map结合有两种取出元素的方法:
方法一:首先取出Map中的键,将其转存储到可ichuangjian迭代器的集合(即Map转换成Set就可以迭代)
方法二:entrySet:该方法将键和值得映射关系作为对象存储到了Set集合众,而这个映射关系的类型就是Map.Entry类型。
代码演示:
Map集合小应用:统计字符串中各个字符重复的个数
代码演示:
下面是Java中集合框架简图:
上图中可以看到,Collection接口有两个子接口List和Set。
Collection接口提供对元素的方法有添加、删除、判断、获取、其他(比如说;取交集,将集合装换成数组)。
List接口的特点是,可以操作脚标,数组元素可以重复,按照集合元素添加的顺序,通常对数据有添加、删除、修改、获取
|--List:元素是有序的,元素可以重复。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度快,但是增删稍慢,线程不同步。
|--LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢,线程不同步。
|--Vector:底层是数组结构,线程同步,被ArrayList替代了,因为效率低。
|--Set:元素是无序的(存入和取出的顺序不一定一致),元素不可以重复。
|--HashSet:底层数据结构是哈希表,是线程不安全的,不同步。HashSet是如何保证元素的唯一性的呢?是通过元素的两个方法,hashCode和equals来完成。如果元素的hashCode值相同,才会判断equals是否为true。如果元素的hashCode值不同,不会调用equals。对于判断元素是否存在,以及删除等操作依赖的方法是元素的hashCode和equals方法。
|--TreeSet:可以对Set集合中的元素进行排序,底层数据结构是二叉树。它保证元素唯一性的依据是compareTo方法的return。TreeSet排序的第一种方式:让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法,这种方式称为元素的自然顺序,也叫默认顺序。TreeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是 所需的,这是就需要让集合自身具备比较性,在集合初始化时就让其具有比较性方式。
Collection接口系列的集合均可以用迭代器取出元素。
Map集合:
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
|--Ha shMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
Map结合有两种取出元素的方法:
方法一:首先取出Map中的键,将其转存储到可ichuangjian迭代器的集合(即Map转换成Set就可以迭代)
方法二:entrySet:该方法将键和值得映射关系作为对象存储到了Set集合众,而这个映射关系的类型就是Map.Entry类型。
代码演示:
private static void method_2(Map<Integer, String> map) { map.put(25,"xiaoqiang"); map.put(23,"wangcai"); map.put(10, "lisi") ; map.put(6, "zhaoliu") ; /*方法一: * 迭代取出map中的键值对 * 原理:首先通过获取map中的键,存入到set中,然后迭代遍历set中的键,每次迭代获取key中对应的值 */ // Set<Integer> keySet = map.keySet() ; // Iterator<Integer> it = keySet.iterator() ; // while(it.hasNext()){ // Integer key = it.next() ; // String value = map.get(key) ; // System.out.println(key+"::"+value); // // // } /* * 方法二: * 通过map.entry()方法取出一个map.entry存入set集合中 * 然后迭代set集合 */ Set<Map.Entry<Integer, String>> me = map.entrySet() ; Iterator<Map.Entry<Integer, String>> it = me.iterator() ; while(it.hasNext()){ Map.Entry<Integer, String> map_entry = it.next() ; Integer key = map_entry.getKey() ; String value = map_entry.getValue() ; System.out.println(key+"::"+value); } }
Map集合小应用:统计字符串中各个字符重复的个数
代码演示:
import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.TreeMap; public class MapTest { public static void main(String[] args) { String str = "abcabcabcabcde"; getCharCount(str); List all = new ArrayList () ; all.add(12); } public static void getCharCount(String str) { /** * 统计字符串中出现的字符的个数 * 先将字符串转换成一个字符数组 然后将字符数组中的元素作为键存入map对象,元素所对应的值为该元素在字符串中的个数。 */ //将字符串转换为字符数组 char[] chs = str.toCharArray(); //创建一个map集合对象用于存储字符与字符个数之间的映射 Map<Character, Integer> map = new TreeMap<Character, Integer>(); //使用循环遍历chs数组中的个数逐个的存入map集合对象中 for (int i = 0; i < chs.length; i++) { //取出对应字符的个数 ,如果字符存在返回字符的个数,如果字符不存在则返回null Integer value = map.get(chs[i]); //判断集合中是否存在字符,若存在将其对应的个数值加一,若不存在则则向集合众添加 //判断集合中是否存在该字符的依据是:通过map.get()方法返回的值,g 9f03 et方法中若存在该键则返回该键所对应的值,若不存在该键,则返回null if (value == null) { map.put(chs[i], 1); } else { map.put(chs[i], value + 1); } } //调用格式化函数 System.out.println(mapToString(map)); } private static String mapToString(Map<Character, Integer> map) { /** * 格式化方法用于调整map集合对象输出的格式 */ Iterator<Character> it = map.keySet().iterator() ; //创建一个StringBuilder对象并实例化 StringBuilder sb = new StringBuilder(); //迭代更改格式 while(it.hasNext()){ Character key = it.next() ; Integer value = map.get(key); sb.append(key+"("+value+")"); } return sb.toString(); } }
相关文章推荐
- 黑马程序员--集合框架知识总结和泛型--java学习日记7(基础知识)
- 黑马程序员_java基础知识总结(3)集合框架
- 黑马程序员——基础知识总结_集合框架1
- 黑马程序员_Java第17天知识总结_集合框架的工具类_Collections_Arrays_将数组变成list集合_集合变数组_高级for循环_可变参数
- Java基础知识强化之集合框架笔记72:集合特点和数据结构总结
- 黑马程序员学习log第五篇基础知识:JAVA的面向对象之集合总结
- 黑马程序员——java基础----集合框架知识点总结(一)
- 黑马程序员——java基础知识之集合框架(容器)
- 黑马程序员_Java第14天知识总结_集合类(集合框架)_Collection_迭代器_List_Set_HashSet
- 黑马程序员——Java基础知识(集合框架(上))
- 黑马程序员:Java基础总结----集合框架的工具类
- 黑马程序员———Java基础------集合框架知识点总结(二)
- 黑马程序员-Java基础总结08——集合与集合框架(…
- 黑马程序员——Java基础知识——集合框架、集合工具类、Arrays
- Java基础知识强化之集合框架笔记74:各种集合常见功能 和 遍历方式总结
- 黑马程序员——Java基础知识(集合框架(下))
- 黑马程序员 11 Java基础教学 - 11 - 集合框架总结
- Java基础知识强化之集合框架笔记14:List集合存储字符串并遍历
- Java基础知识强化之集合框架笔记16:List集合的特有功能概述和测试
- 黑马程序员——Java重点基础之集合框架(四)