JAVA学习笔记之集合框架

这里写图片描述
第一、第二层都是接口,第三层是接口的实现。

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()只会比较两个对象的引用

附:JavaAPI手册

(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:表示调用该方法的类小于参数类

5.Comparator接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值