第一、第二层都是接口,第三层是接口的实现。
1.Collection
(1)ArrayList
示例:
import java.util.List;
import xxx.xx.Fruit;//该类中有两个成员:水果名称和水果编号
public class Market{//市场里放着各种商品
public List fruitToBuy = new ArrayList();//可以买到的水果序列(相当于一个容器)
public void fruitAdd(Fruit f){
fruitToBuy.add(f);//要卖的水果放入容器
}
public void fruitCheck(int index){
Fruit temp = (Fruit)fruitToBuy.get(index); //放入List中的对象都被视为Object,所以 //取出后需强制类型转换
System.out.println("第"+index+"种水果序号为:"+temp.no);
System.out.println("名称为"+temp.name);
}
}
ArrayList其他添加方法:
方法原型 | 作用 |
---|---|
void add(int index, Object element) | 可以把元素添加到指定位置 |
void addAll(Object[] elements) | 可以把数组中的所有元素添加到序列末端 |
void addAll(int index, Object[] elements) | 可以把数组中的所有元素添加到指定位置 |
ArrayList其他常用方法:
方法原型 | 作用 |
---|---|
(不属于ArrayList)Object[] Arrays.asList(type[] elements) | 将传入数组转化为Object数组并返回 |
int size() | 返回序列中元素个数 |
int indexOf(Object element) | 返回一个元素的第一次出现的索引位置(用equals()查找),查找失败则返回-1 |
Iterator Iterator() | 返回一个迭代器对象,可以迭代序列中的元素 |
void set(int index, Object element) | 把指定位置元素替换(修改)成element |
boolean remove(Object element) | 删除第一次出现的element,删除成功返回true |
boolean remove(int index) | 删除指定位置的元素,删除成功返回true |
boolean removeAll(Object[] elements) | 删除指定位置的元素,删除成功返回true |
boolean contains(Object element) | 判断序列中是否包含某个元素,是返回true(调用element.equals()对序列每一个元素进行判断) |
boolean containsAll(Object[] elements) | 懂得都懂 |
注:
- ArrayList也可以用for each来遍历。
- 原来的equals()只会比较两个对象的引用
(2)泛型
直接上示例:
public class Market{
public List<Fruit> fruitToBuy = new ArrayList<Fruit>();//添加了<类型>
public void fruitAdd(Fruit f){
fruitToBuy.add(f);//要卖的水果放入容器
}
}
使用泛型可限制其添加元素的类型(只能添加该类型和该类型的子类,否则编译器会报错),同时用get()等方法取出时亦不需要强制类型转换。
注意:泛型不能使用基本类型:int double boolean等
(3)HashSet类
HashSet是无序不可重复的集,所以像get(int index),add(int index, Object element)等有关于索引的方法都不可使用。另外,在HashSet中添加重复的元素并不会报错,只是并不能真正添加到HashSet中去。其余与ArrayList类似。
另外,使用contains()判断一个HashSet中是否存在某个元素时,contains()会先调用hashCode()取得输入元素的哈希码,并逐个比较HashSet中每个元素的哈希码,只有哈希码相同时,才会调用equals()比较两个元素是否相等。(用eclipse的自动生成hashCode()和equals()的功能即可)
2.Map
Map和Collection功能类似,不过Map中存储的是无序键值对(K-V),且键不可重复
(1)HashMap类
与ArrayList类似,可以使用泛型,格式为:
public class Market{
public Map<K, V> fruitToBuy = new HashMap<K, V>();
}
HashMap常用方法:
方法 | 功能 |
---|---|
put(K, V) | 增加一个键值对 |
V get(K) | 通过键获取值 |
remove(K) | 删除键值对 |
Set keySet() | 返回键Set |
Set entrySet() | 返回键值对Set |
boolean containsKey(K)(containsValue(V)) | 判断HashMap中是否包含某个键(值) |
… | … |
注:没写返回值的就是我不知道…
注意:
- put()也可用于修改键值对的值。
- containsKey()和containsValue()同样会调用hashCode()。
- 在使用entrySet()时需使用Entry泛型
import java.util.Map.Entry;
Set<Entry<K, V>> entry_Set = fruitToBuy.entrySet();
//遍历这个Set的时候也需要用泛型标明类型
for(Entry<K, V> obj:entry_Set){
//输出键与值
System.out.println(obj.getKey());
System.out.println(obj.getValue());
}
}
3.Collections
Collections.sort(List list)可对List进行排序,实际是调用元素类中的compareTo()方法进行比较的。
4.Comparable接口
该接口用于定义类的比较的默认规则,实现于要比较的类中。
需实现的int compareTo(本类对象)返回值有三种类型:1、0、-1
1:表示调用该方法的类大于参数类
0:表示两个类相等
-1:表示调用该方法的类小于参数类