集合框架


-----------------------------------------------------------------------------
集合,就是存对象用的:
1.数据多了--->封装--->对象
2.对象多了--->封装--->集合,数组
  |--集合,长度可变,多种数据类型,对象和基本类型对象
  |--数组,长度固定,同种数据类型,对象和基本类型
集合框架的,实现类的数据结构:
(掌握常用的4类8种,5+3)
1.链表:改快读慢 
  LinkedList<E>
2.树:排序最快
  TreeMap<K,V>,TreeSet<E>
3.数组:读快改慢
  Vector<E>,ArrayList<E>
4.哈希表:两者之间
  Hashtable<K,V>,HashMap<K,V>,Has,hSet<E>
5.栈和队列:
集合框架,可以分为2种,顶层通过接口组织的:
Iterable<T>(接口)
  |--Collection<E>(接口)
    |--Queue<E>(接口)
      |--Deque<E>(接口)
        |--LinkedList<E>(类)
    |--Set<E>(接口)
      |--SortedSet<E>(接口)
        |--TreeSet<E>(类)
      |--HashSet<E>(类)
        |--LinkedHashSet<E>(类)
    |--List<E>(接口)
      |--Vector<E>(类)
        |--Stack<E>(类)
      |--ArrayList<E>(类)
      |--LinkedList<E>(类)
Iterable<T>,Iterator<E>和Map<K,V>,都是顶层接口.
Map<K,V>(接口)
  |--SortedMap<K,V>(接口)
    |--TreeMap<K,V>(类)
  |--Hashtable<K,V>(类)
    |--Properties(类)
  |--HashMap<K,V>(类)
    |--LinkedHashMap<K,V>(类)
Map.Entry<K,V>接口,是Map<K,V>接口的内部接口:
  static interface Map.Entry<K,V> 
--------------------------------------------------------------------------------
Object中的方法:
public final Class<?> getClass()
返回值为静态同步函数的锁对象
1.public boolean equals(Object obj)
默认实现是==
2.public int hashCode()
此方法,为以后使用哈希表(例如java.util.HashMap),提供了基础.
3.public String toString()
返回值为getClass().getName() + '@' + Integer.toHexString(hashCode())
public final void notify()
public final void notifyAll()
public final void wait() throws InterruptedException
public final void wait(long timeout) throws InterruptedException
public final void wait(long timeout,int nanos) throws InterruptedException
protected Object clone() throws CloneNotSupportedException
创建并返回此对象的副本
protected void finalize() throws Throwable
析构函数,垃圾回收器将调用此方法
------------------------------------------------------------------------------
Collection<E>接口中的方法:
int size()
集合中包含多少元素
boolean isEmpty()
boolean contains(Object o)
是否包含某个元素
boolean containsAll(Collection<?> c)
是否包含某一堆元素
Iterator<E> iterator()
取出的意思
Object[] toArray()
转换为数组
<T> T[] toArray(T[] a)
返回数组的类型,与指定的类型相同
boolean add(E e)
添加元素
boolean addAll(Collection<? extends E> c)
添加一堆素
boolean remove(Object o)
移除一个元素
boolean removeAll(Collection<?> c)
移除一堆元素
void clear()
清空容器
boolean retainAll(Collection<?> c)
求交集
1.boolean equals(Object o)
重写Object中的方法
2.int hashCode()
重写Object中的方法
--------------------------------------------------------------------
案例:
读源码,day14,敲源码.
 
 
 
 
 

-------------------------------------------------------------------------
(增强for循环--Java5的新特性)
以下2种情况,可以使用增强的for循环:
1.数组
2.实现Iterable接口的对象
语法:
Java5中的foreach语句,并不是真的foreach语句,还是for语句.
for(修饰符 type 变量名:集合变量名){...}
注意事项:
1.迭代变量必须在()中定义!
2.集合变量可以是数组或实现了Iterator接口的集合类.
案例:
重构,求和运算:
public static int add(int...args)
{
 int sum = 0;
 for(int arg:args)
 {
  sum += arg;
 }
 return sum;
相关接口:要使用增强for循环,必须要实现java.lang.Iterable<T>接口.
所以,Map接口,不具备迭代性!
-----------------------------------------------------------------------------
集合之间的相互转换,
Map<K,V>接口中的部分方法:
boolean isEmpty()
是否为空
boolean containsKey(Object key)
是否某个键
boolean containsValue(Object value)
是否包含某个值
int size()
返回集合中元素的个数
void clear()
清空
V get(Object key)
得到键所对应的值
V put(K key,V value)
添加元素
void putAll(Map<? extends K,? extends V> m)
添加一个Map集合
V remove(Object key)
删除集合中的元素
1.Set<K> keySet()
将Map中的键转换为Set集合
2.Collection<V> values()
将Map中的值转换为Collection集合
3.Set<Map.Entry<K,V>> entrySet()
将Map集合转换为Set集合
Map.Entry<K,V>接口中的部分方法:
K getKey()
返回与此项对应的键
V getValue()
返回与此项对应的值
V setValue(V value)
替换此项中对应的值
案例:
将Map集合转换为Set集合,实现可以迭代.
HashMap<String,Integer> m = new HashMap<String,Integer>();
m.put("str1", 123);
m.put("str2", 456);
m.put("str3", 789);
Set<Map.Entry<String,Integer>> mes = m.entrySet();
for(Map.Entry<String, Integer> me:mes)
{
 System.out.println(me.getKey()+"----"+me.getValue());
}
在JSP页面中实现类似的迭代语法:
<c:forEach items="${map}" var="entry">
   ${entry.Key}:${entry.Value}
</c:forEach>
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值