A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© shilu 中级黑马   /  2015-10-13 08:05  /  351 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Set:
|- HashSet
  |- LinkedHashSet

|- TreeSet


set:
元素唯一不能重复
HashSet:
元素唯一不能重复
底层结构是 哈希表结构
元素的存与取的顺序不能保证一致
如何保证元素的唯一的?
  重写hashCode() 与 equals()方法

LinkedHashSet:
元素唯一不能重复
底层结构是 哈希表结构 + 链表结构
元素的存与取的顺序一致
如何保证元素的唯一与有序的?
  元素唯一: 哈希表结构保证的
  元素有序: 链表结构保证的
TreeSet:
元素唯一不能重复
底层结构是 二叉树结构
元素的存与取的顺序不能保证一致
但是,在集合内部进行了元素的排序【自然排序,比较器排序】
  自然排序接口 Comparable<T>
   实现方法 public abstract int compareTo(T obj);
  
  比较器排序接口 Comparator<T>
   实现方法 public abstract int compare(T obj1, T obj2);
  
TreeSet集合是如何保证元素唯一并有序的?
  自然排序接口 Comparable<T>
  比较器排序接口 Comparator<T>

  Map:
    双列集合
    map集合中的元素都是成对出现,成对存储的
    map集合中的元素都是以一对键和值的形式组成存在的,称为键值对,理解为夫妻对
    map集合中的键不能重复存储,值可以重复
    map集合中的每一个键 对应着一个值
  
  
  Map接口和Collection接口的不同
  Map是双列的,Collection是单列的
  Map的键唯一,Collection的子体系Set是唯一的
  Map集合的数据结构值针对键有效,跟值无关
     Collection集合的数据结构是针对元素有效

方法:
  添加功能:
   V put(K key, V value)  把指定的键与指定的值添加到Map集合中

  删除功能:
   void clear() 清空集合中的元素
   V remove(Object key) 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值
  
  判断功能:
   boolean containsKey(Object key) 判断指定的键,在Map集合中是否存在
   boolean containsValue(Object value)  判断指定的值,在Map集合中是否存在
   boolean isEmpty() 判断Map集合是否为空的集合
   
  获取功能:
   Set<Map.Entry<K,V>> entrySet() 获取到Map集合中所有的键值对对象的集合(Set集合)
   V get(Object key) 根据指定的键,在Map集合中获取对应的值
   Set<K> keySet() 获取Map集合中所有的键,存储到Set集合中
   int size() : 获取Map集合中 键值对元素的个数
   Collection<V> values(): 获取Map集合中所有的值,存储到Collection集合中
   
---------------------
Map集合遍历的两种方式
方式1:根据键找值
  //方式1 键找值的方式
  //a, 获取到Map集合中所有的键
  //b, 遍历键的集合,获取到每一个键
  //c, 通过键,找到对应的值
  
  //获取到Map集合中所有的键
  Set<String> keys = map.keySet();
  //遍历键的集合,获取到每一个键
  for (String key : keys) {
   //通过键,找到对应的值
   Student s = map.get(key);
   System.out.println( key + "..." + s.getName() + "..." + s.getAge() );
  }
  
方式2:根据键值对对象找键和值
  //a, 获取Map集合中所有的键值对元素,返回对应的集合
  //b, 遍历键值对元素集合,获取到每一个键值对元素对象
  //c, 通过键值对元素对象,获取对应的键,和对应的值
  
  //获取Map集合中所有的键值对元素,返回对应的集合
  Set< Map.Entry<String, Student>> entrySet = map.entrySet();
  //遍历键值对元素集合,获取到每一个键值对元素对象
  for (Map.Entry<String, Student> entry : entrySet) {
   //通过键值对元素对象,获取对应的键,和对应的值
   //找键
   String key = entry.getKey();
   //找值
   Student s = entry.getValue();
   //打印
   System.out.println( key+"..."+s.getName()+"..."+s.getAge() );
  }
----------------------------------
* HashMap:
*   特点:
*    他是Map集合的子集合
*    底层采用哈希表结构
*    HashMap集合中的key不能重复,如何保证键不能重复?
*     重写hashCode() 与 equals()
*    不能保证元素存与取的顺序完全一致
*    允许使用 null 值和 null 键
*    线程不同步,效率高

---------------------------------
  * LinkedHashMap:
*   特点:
*    有序并唯一的Map集合
*     有序: Map集合中元素的存与取的顺序一致
*     元素唯一: Map集合中的键 不能重复存储
*
*    有序: 是由 链表结构来实现的
*    元素唯一: 是由 哈希表结构来实现的
---------------------------------
* TreeMap:
*   特点:
*    底层是二叉树实现的
*    TreeMap集合中的键是如何保证唯一并排序的?
*     方式1,通过 自然排序接口 实现
*      Comparable接口
*       重写方法  compareTo(T obj)
*
*     方式2,通过比较器接口 实现
*      Comparator接口
*       重写方法 compare(T obj1, T obj2)

-----------------------------------
集合的嵌套
里面里面的元素是一个集合
*   new ArrayList<  ArrayList<String>  >();
*   new HashMap<String, HashMap<String,String> >;
*   new HashMap<String, ArrayList<String> >
*   new LinekedList< HashMap<String,String>  >

-----------------------------------
1, HashMap和Hashtable的区别?
  
  HashMap:
   他是Map集合的子集合
   底层哈希表结构
   键和值 可以存储 null
   jdk1.2 线程不同步,效率高
  
  Hashtable:
   他是Map集合的子集合
   底层哈希表结构
   键和值 不能存储为 null
   jdk1.0 线程同步,安全
   
   
2, List,Set,Map等接口是否都继承子Map接口?
List 不继承 Map接口, List继承的是 Collection集合
Set  不继承 Map接口,Set 继承的是 Collection集合


Collection 单列集合, 掌握Collection 集合中的方法
  |- List, 知道List集合中的方法
   |- ArrayList
   |- Vector
   |- LinkedList
  |- Set
   |- HashSet
    |- LinkedHashSet
   |- TreeSet
   
Map 双列集合, 掌握 Map集合中的方法
  |- HashMap
   |- LinkedHashMap
  |- TreeMap
   
------------------------------------------
* Collections: 集合工具类
* Collection: 单列集合的顶层接口
* Map : 双列集合的顶层接口
*
* Collections中的方法:
  public static <T> void sort(List<T> list) 排序
  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) 集合中的元素存储位置随机打乱
   
ArrayList:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高

Vector:
底层数据结构是数组,查询快,增删慢
线程安全, 效率低

特有方法:
public void addElement(E obj) --> add()
public E elementAt(int index) --> get(int index)
public Enumeration<E> elements() ---> iterator()
boolean hasMoreElements() ---> hasNext()
E nextElement()  ---> next()

LinkedList:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高

特有方法:
   void addFirst(E e)   将指定元素插入此列表的开头。
    void addLast(E e)  将指定元素添加到此列表的结尾。
   E getFirst()  返回此列表的第一个元素  
   E getLast()  返回此列表的最后一个元素
   E removeFirst()  移除并返回此列表的第一个元素。
   E removeLast()  移除并返回此列表的最后一个元素
   
   
   
   
   

   
   
   
   
   
   
   
   
   
   
   

评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1

查看全部评分

1 个回复

倒序浏览
您需要登录后才可以回帖 登录 | 加入黑马