------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
集合框架
对象————存储)集合
数组、集合
数组——长度不变,类型相同
出现多个框架的原因
java.util.包
有序的 collection(也称为 序列 )。
此接口的用户可以对列表中每个元素的插入位置进行精确地控制。
一个不包含重复元素的 collection。更确切地讲,
set 不包含满足
e1.equals(e2)
的元素对
e1
和
e2
,
取出方式定义在集合的内部,可以直接访问集合内部元素。
判断与获取。将这些共性抽取,这些内部类都符合一个规则就是Iterator。
通过对外提供的方法iterator()
{ System.out.println(it.next()); }
并获得迭代器在列表中的当前位置。 ListIterator 没有当前元素;
长度为 n 的列表的迭代器有 n+1 个可能的指针
Element(0) Element(1) Element(2) ... Element(n-1)cursor positions: ^ ^ ^ ^ ^
因为会发生并发操作异常. 所以在迭代时,只能用迭代器的方法操作,
若想要其他操作如添加,修改等,就需要用子接口ListIterator。
boolean equals(Object obj)
-
参数:
-
o1
- 要比较的第一个对象。 -
o2
- 要比较的第二个对象。
返回:
-
根据第一个参数小于、
抛出:
-
ClassCastException
- 如果参数的类型不允许此 Comparator 对它们进行比较
将键映射到值的对象。
一个映射不能包含重复的键;
每个键最多只能映射到一个值。
Map 接口提供三种collection 视图,
允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。
映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。
某些映射实现可明确保证其顺序, 如 TreeMap 类;
另一些映射实现则不保证顺序,如 HashMap 类。
Map集合
该集合存储键值时,一对一对往里存,而且要保证键的唯一性
方法:添加 put(K key ,V value) putAll(Map<? extends K,? extends V>)
删除 clear() remove(Object key)
判断 containsValue(Object value) containskey(Object key) isEmpty()
获取 get(Object key) size( ) values()
entrySet()
返回此映射中包含的映射关系的 Set
视图。
以下为Map接口的实现类
|---------HashMap
基于哈希表的 Map 接口的实现类。允许使用空值空键,不同步
|--------- TreeMap
基于红黑树(Red-Black tree)的 NavigableMap
实现。该映射根据其键的自然顺序进行排序,
或者根据创建映射时提供的 Comparator
进行排序,具体取决于使用的构造方法。
底层是二叉树数据结构,该集合不同步。
|---------HashTable
此类实现一个哈希表,该哈希表将键映射到相应的值。
任何非 null
对象都可以用作键或值。
为了成功地在哈希表中存储和获取对象,
用作键的对象必须实现 hashCode
方法和 equals
方法。是线程同步的
HashTable | 哈希表 | 现行同步 | 不允许空值空键 | 效率低jdk1.0 |
HashMap | 哈西表 | 不同步 | 允许空值空键 | 效率高jdk1.2 |
TreeMap | 二叉树 | 不同步 | 可用于给map集合中的键进行排序 |
|------Map.Entry
映射项(键-值对)。
Map.entrySet 方法返回映射的 collection 视图,其中的元素属于此类。
获得映射项引用的 唯一 方法是通过 嵌套类
此 collection 视图的 迭代器来实现。、
这些 Map.Entry 对象 仅 在迭代期间有效;更确切地讲,如果在迭代器返回项之后修改了底层映射,
*Map 的三种取出方式:
1】 Set<k> keySet
返回次用舌中包含的键的Set视图,因为Set具有迭代器,所以可以进行迭代取出所有的键值,
在根据get方法获取每 一个键值所对应的值.。即将map中的键值存到Set中,利用Set中的迭代器取出键值,
根据map的get方法取出键值对应的值。
2】Set<Map.Entry<K,V>> entrySet:
将map集合中的映射关系存到Set集合中,这个关系的数据类型就是Map.Entry
通过Map.Entry的getKey和getValue方法获取键和值
Collection
equals() hashCode() isEmpty()
有序的Collection,也称序列。List元素有序、可以重复、因为该集合体系有索引
List 接口的大小可变数组的实现
实现了所有可选列表操作,并允许包括 null 在内的所有元素。
(此类大致上等同于 Vector 类,除了此类是不同步的。)
List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null )。
除了实现 List 接口外, LinkedList 类还为在列表的开头及结尾
get 、 remove 和 insert 元素提供了统一的命名方法。特有方法:addFirst() addLast() 添加头部和尾部getFirst() getLast()获取头部和尾部元素,但不删除。
没有元素,则出现NosuchElementExceptionremoveFirst() removeLat() 获取元素,但被删除,
如果集合中没有元素,则返回NosuchElementExceptionjdk1.6 以后出现替代方法
offerFirst() offerLast() peekFirst()
peekLast() pollFirst() pollLast() 没有则返回空
/* LinkedListTest模拟一个堆栈或者队列数据结构 堆栈:先进后出 队列:先进先出 */ //此处为先进后出 import java.util.*; class DuiLie { private LinkedList link; DuiLie() { link = new LinkedList(); } public void myAdd(Object obj) { link.add(obj); } public Object myGet() { return link.removeLast(); } public boolean isNull() { return link.isEmpty(); } } class LinkedListTest { public static void main(String[] args) { DuiLie d1 = new DuiLie(); d1.myAdd("java1"); d1.myAdd("java2"); d1.myAdd("java3"); while(d1.isNull()) { sop(d1.myGet()); } } public static void sop(Object obj) { System.out.println(obj); } }
如何保证唯一性?
通过两个方法hashCode()和equals()完成。如果元素的HashCode相同,才会判断equals
/*
HashSet的获取,存储不重复,且无序
*/
import java.util.*;
class HashSetTest
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
HashSet hs = new HashSet();
hs.add("java1");
hs.add("java1");
hs.add("java2");
hs.add("java3");
hs.add("java4");
Iterator it = hs.iterator();
while(it.hasNext())
{
sop(it.next());
}
}
}
注意复写compareTo方法,否则出现异常
保证元素的唯一性的依据是compraeTo方法
元素需要实现Comparable接口,覆盖compreTo方法
覆盖compare方法。
需要让集合自身具备比较性。在集合初始化时就有了比较方式。
class StrLenComparator implements comparator
{
public int compare(Object o1,Object o2)
{
}
}
TreeSet tr = new TreeSet(new StrLenComparator());
/*
LinkedListTest模拟一个堆栈或者队列数据结构
堆栈:先进后出
队列:先进先出
*/
//此处为先进后出
import java.util.*;
class DuiLie
{
private LinkedList link;
DuiLie()
{
link = new LinkedList();
}
public void myAdd(Object obj)
{
link.add(obj);
}
public Object myGet()
{
return link.removeLast();
}
public boolean isNull()
{
return link.isEmpty();
}
}
class LinkedListTest
{
public static void main(String[] args)
{
DuiLie d1 = new DuiLie();
d1.myAdd("java1");
d1.myAdd("java2");
d1.myAdd("java3");
while(d1.isNull())
{
sop(d1.myGet());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
import java.util.*;
/*
练习:按照字符串长度进行排序
字符串本身具备比较性,但是他的方式不是所需要的
*/
class StrLenComparator implements Comparator
{
public int compare(Object o1,Object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;
int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
if(num==0)
return s1.compareTo(s2);
return num;
}
}
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet ts = new TreeSet(new StrLenComparator());
ts.add("abc");
ts.add("abk");
ts.add("jinl");
ts.add("kosko");
ts.add("jxijsij");
Iterator it = ts.iterator();
while(it.hasNext())
{
sop(it.next());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}