集合

集合常用接口
接口意味着其实现类必须实现这些方法

1、collection接口
collection接口是List\Set\Queue接口的父接口

boolean     add(Object o):增加一个元素
boolean     addAll(Collection c):将集合c中的元素添加到指定的集合中
void        clear():清空集合中的元素、长度变为0
boolean     contains(Object o):是否包含指定元素
boolean     containsAll(Collection c):是否包含集合c中的所有元素
Iterator    iterator():返回Iterator对象,用于遍历集合中的元素
boolean     remove(Object o):移除元素(只删除第1个)
boolean     removeAll(Collection c):相当于减集合c
boolean     removeIf(Predicate fliter)
boolean     retainAll(Collection c):相当于求与c的交集
boolean     isEmpty()
int         hashCode()
int         size():返回元素个数
Object[]    toArray():把集合转换为一个数组
public static void main(String[] args){
        Collection<String> c = new ArrayList<String>();
        c.add("java讲义");
        c.add("轻量级java EE 企业应用实战");
        c.removeIf((obj)->obj.contains("讲义"));
        System.out.println(c);
    }

2、Iterable接口
Iterable接口是Collection接口的父接口,有一个forEach(Consumer action)方法

//forEach遍历集合
public static void main(String[] args){

        Collection<String> list = new ArrayList<String>();
        list.add("java讲义");
        list.add("轻量级java EE 企业应用实战");
        list.forEach((obj)->System.out.println(obj));
        //Consumer<? super String> 接口,有一个void accept<? super string>的方法。
        //该为函数式接口,因此可使用lambda表达式
        //list.forEach(System.out::println);也可
    }

3、Iterator接口
Iterator接口

Iterator<String> it =c.iterator();
it.forEachRemaining((obj)->System.out.println(obj));

Iterator接口及foreach循环迭代的主要功能都是访问集合元素。
对迭代变量的修改不会对实际的集合产生任何影响,且不能对实际集合进行修改

二、Set接口及实现类
Set接口及实现类的介绍

Set接口API
 
 
1、HashSet类的补充
    继承的接口:Serializable, Cloneable, Iterable, Collection, Set
    具有clone方法,返回该类的副本
    重写equals及hashCode方法(里面的equals方法不用)

//常用的判断equals()方法写法
public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj != null && obj.getClass() == R.class) {
            R r = (R) obj;
            // 一般为如果两者的实例变量相同即返回true
        }
        return false;
    }
//重写hashCode()方法的注意事项
   重写equals()时,必须要重写hashCode()方法。

   重写hashCode()方法的基本准则:
       保证程序在运行时,同一对象对此调用hashCode()方法应该返回相同的值
       保证两个对象的equals()为true时,hashCode()的返回值也相等
       对象中用于equals()方法比较的实例变量,都应该用于计算hashCode值

  重写hashCode的一般步骤:
       计算对象内每个实例变量的hashCode值:
            实例变量类型                    计算方式
            boolean                        (f? 1:0)
            byte\short\char\int (int)       f
            long                           (int) (f^(f>>>32))
            float                          Float.floatToIntBits(f)
            double                         Long l = Double.doubleToLongBits(f) 先转换为long再转换
            引用                           f.hashCode()
       将第1步计算出来的该对象的多个hashCode值乘以一个质数后相加

2、TreeSet的补充
TreeSet的API文档

TreeSet 会调用compareTo方法比较元素大小,自然排序中的元素对象,都必须实现了Comparable接口。
      BigDemical、BigInteger以及所有的数值型对应的包装类
      Character
      Boolean
      String
      Date、Time
//定制排序,关注TreeSet的构造器
public class R {

    private Integer age;
    R() {};
    public String toString(){
        return "R[age:"+age+"]";
    }
    public R(Integer age) {
        this.age = age;
    }
    ...getter/setter........
}


public class TreeSetTest {
    public static void main(String[] args){
        TreeSet<R> t = new TreeSet<R>((R r1,R r2)->r1.getAge().compareTo(r2.getAge()));
        t.add(new R(15));
        t.add(new R(20));
        t.add(new R(18));
        t.add(new R(15));

        System.out.println(t);//[R[age:15], R[age:18], R[age:20]]
    }
}

3、EnumSet类
EnumSet类API
EnumSet类的补充

4、各种Set实现类性能的补充

Set的实现类都是线程不安全的,必须在创建时,通过synchronizedSortedSet方法包装
SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...))

三、List集合

List集合及其实现类
List接口

1、List接口的补充

//replaceAll(UnaryOperator Operator)
public static void main(String[] args) {
        List<String> books = new ArrayList<String>();
        books.add("java讲义");
        books.add("轻量级java EE 企业应用实战");
        books.replaceAll(obj -> String.valueOf(obj.length()));
        System.out.println(books);//[6, 17]
    }

// ListIterator的add方法
Iterator只能在迭代集合进行删除操作,ListIterator可对迭代对象进行添加操作

2、ArrayList的补充
ensureCapacity的用法

如果往ArrayList中添加大量的元素,可以在创建的时候指定initialCapacity参数
void ensureCapacity(int minCapacity),先分配空间的大小,不够会自动扩展  
void trimToSize(), 清理集合多占用的空间

注意:Arrays工具类中的ArrayList长度是不可变的

四、Queue集合
Queue集合及其实现类
Queue接口API
Deque接口

五、Map集合

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值