黑马程序员——Java集合框架—整理笔记

                                                          ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


集合框架:为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。集合特点:

     只能存储对象;
     长度可变;
     可存储多种类型的对象(一般只存储一种类型);

集合的主要结构如下图:


在集合框架中,Collection接口和Map接口在层次结构没有任何亲缘关系,它们是截然不同的。

Collection接口的方法:

方法摘要

 boolean

add(E e) 
          确保此 collection 包含指定的元素(可选操作)。

 boolean

addAll(Collection<? extends E> c) 
          将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。

 void

clear() 
          移除此 collection 中的所有元素(可选操作)。

 boolean

contains(Object o) 
          如果此 collection 包含指定的元素,则返回 true。

 boolean

containsAll(Collection<?> c) 
          如果此 collection 包含指定 collection 中的所有元素,则返回 true。

 boolean

equals(Object o) 
          比较此 collection 与指定对象是否相等。

 int

hashCode() 
          返回此 collection 的哈希码值。

 boolean

isEmpty() 
          如果此 collection 不包含元素,则返回 true。

 Iterator<E>

iterator() 
          返回在此 collection 的元素上进行迭代的迭代器。

 boolean

remove(Object o) 
          从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。

 boolean

removeAll(Collection<?> c) 
          移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。

 boolean

retainAll(Collection<?> c) 
          仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。

 int

size() 
          返回此 collection 中的元素数。

 Object[]

toArray() 
          返回包含此 collection 中所有元素的数组。

<T> T[]

 

toArray(T[] a) 
          返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。


Collection接口

                 List接口:有索引,所以元素是有序的,元素可以重复;

                         ArrayList类:底层是数组数据结构,特点:查询速度很快,但增删稍慢,线程不同步,默认10个元素。超过10个会自动增加长度。

                         LinkedList类:底层是链表数据结构,查询很慢,增删速度很快,线程不同步。

                         Vector类:底层是数组数据结构,查询、增删都很慢。1.2之前使用Vector,而1.2出现了ArrayList,Vector逐渐被淘汰。

                Set接口:元素无序,且不可以重复。

              HashSet类:①底层数据结构是哈希表。线程是不同步的。
                          ②集合元素可以是null,但只能放入一个null。
                          ③当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该

                            对象在HashSet中存储位置。如果hashCode值相同的话就通过equals方法比较两个对象是否相等,若相等就不插入重复元素。
             TreeSet类:①底层的数据结构是二叉树。线程是不同步的。对Set集合中的元素的进行指定(我们指定的比较器)顺序的排序。
                         ②TreeSet支持两种排序方式,自然排序和定制排序,其中自然排序为默认的排序方式。
                         ③TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0
                         ④TreeSet保证集中的元素是有序的,有2种方法可以实现对象之间的可比较性:1,添加到TreeSet的对象实现了Comparable接口;2,给规则集

                           的元素指定一个比较器(Comparator)
            LinkedHashSet类:实现了对HashSet的扩展,支持规则集内元素的排序,在HashSet中元素是没有顺序的,而在LinkedHashSet中,可以按元素插入集合的顺

                              序进行提取。


Map接口的方法:

方法摘要

 void

clear() 
          从此映射中移除所有映射关系(可选操作)。

 boolean

containsKey(Object key) 
          如果此映射包含指定键的映射关系,则返回 true。

 boolean

containsValue(Object value) 
          如果此映射将一个或多个键映射到指定值,则返回 true。

 Set<Map.Entry<K,V>>

entrySet() 
          返回此映射中包含的映射关系的 Set 视图。

 boolean

equals(Object o) 
          比较指定的对象与此映射是否相等。

 V

get(Object key) 
          返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。

 int

hashCode() 
          返回此映射的哈希码值。

 boolean

isEmpty() 
          如果此映射未包含键-值映射关系,则返回 true。

 Set<K>

keySet() 
          返回此映射中包含的键的 Set 视图。

 V

put(K key, V value) 
          将指定的值与此映射中的指定键关联(可选操作)。

 void

putAll(Map<? extends K,? extends V> m) 
          从指定映射中将所有映射关系复制到此映射中(可选操作)。

 V

remove(Object key) 
          如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。

 int

size() 
          返回此映射中的键-值映射关系数。

 Collection<V>

values() 
          返回此映射中包含的值的 Collection 视图。


Map接口:该集合存储键值对。一对一往里存,而且要保证键的唯一性。
            Hashtable:①底层是哈希表数据结构,不可以存入null键null值,线程同步。J
                        ②此类实现一个哈希表,该哈希表将键映射到相应的值。任何非null 对象都可以用作键或值。
                        ③为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。
           HashMap:   ①基于哈希表的Map接口的实现。此实现提供所有可选的映射操作,并允许使用null 值和null键。
                        ②除了非同步和允许使用null 之外,HashMap 类与Hashtable 大致相同。此类不保证映射的顺序,特别是它不保证该顺序恒久不变 。

                         将Hashtable替代。
           TreeMap:①基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator(比较器)

                       进行排序,具体取决于使用的构造方法。 
                      ②和Set很像。其实大家,Set底层就是使用了Map集合。线程不同步。可以用于给Map集合中的键进行排序。
HashMap的遍历方法
      ①通过Map.entrySet遍历key和value。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class HashMapTest {
	public static void main(String[] args) {
		HashMap map = new HashMap();
		map.put("a", "aaaa");
		map.put("b", "bbbb");
		map.put("c", "cccc");
		map.put("d", "dddd");
		Set set = map.keySet();
		for (Iterator iter = set.iterator(); iter.hasNext();) {
			String key = (String) iter.next();
			String value = (String) map.get(key);
			System.out.println(key + "====" + value);
		}
	}
}

   ②通过Map.values()遍历所有的value,但不能遍历key。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapTest
{
 public static void main(String[] args)
 {
  HashMap map = new HashMap();
  
  map.put("a","aa");
  map.put("b","bb");
  map.put("c","cc");
  map.put("d","dd");
  
  Set set = map.entrySet();
  
  for(Iterator iter = set.iterator(); iter.hasNext();)
  {
   Map.Entry entry = (Map.Entry)iter.next();
   
   String key = (String)entry.getKey();
   String value = (String)entry.getValue();
   System.out.println(key +" :" + value);
  }
 }
}



                                         ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值