java集合

集合略坑:

一、关于List

实现List的两种常用类:

1)ArrayList,该实现实际上是将对象放置到了ArrayList底层维护的数组当中;

2)LinkedList,该类内部会生成一个Entry对象,里面的结构类似:

Entry{

Entry pre;    //指向前一个

Object element;    //当前元素

Entry next;    //指向下一个

}


ArrayList内存中线性排列,适合查找,不适合删除插入; Linked List适合删除插入,不适合查找;


二、关于set

1)HashSet,每次往里面添加东西时,先会调用hashCode()方法,判断新增加的对象的hashCode是否与集合中的hashCode值一样,如果不一致,就加进去;如果一致,就会调用equals()方法进行比较,equals方法返回true就表示对象已经添加进去了,不需要新增加,否则加进去。

eg:

class Person{

}

HashSet set = new  HashSet();

set.add(new Person());

set add(new Person());

//此时set的长度为2

HashSet set2 = new HashSet();

set2.add("a");

set2.add("a");

//此时set2长度为1

String s1 = new String("a");

String s2 = new String("a");

HashSet set3 = new HashSet();

set3.add(s1);

set3.add(s2);

//此时长度为1

2)TreeSet的构造方法可以带一个实现Comparator接口的类的实例,该类必须重写compare方法,实现特定集合元素的“有序”。

三、关于Map

1)Map的keySet()方法返回key的集合,返回类型时Set;   values()方法返回值的集合,类型时Collection{因为键不能重复}

2)HashMap遍历的两种方式:

①keySet()方法,该方法返回值组成的Set集合,遍历Key查找值

②entrySet()方法,返回一个内部类(Map.Entry)的对象的集合,由该内部类的实例调用getKey()和getValue()方法,查找键值。


补充:关于equals()方法和hashCode()方法:

Object类的equals()方法的特点:

a)自反性:obj.equals(obj);----true

b)对称性:obj1.equals(obj2) == true ----->obj2.euqals(obj1)==true;

c)传递性:obj.equals(obj2)==true;obj2.equals(obj3)==true;----->obj1.equals(obj3)==true;

d)一致性:在obj1,obj2没被修改的前提的下,obj1.equals(obj2) 为固定值

e)obj!=null;obj.equals(null) == false;

关于Object的hashCode()方法

a)对于两个对象来说,调用equals()方法返回true,两个对象的hashCode一定相同

b)对于两个对象,调用equals()方法返回false,hashCode可能相同,也可能不同

//具体看实现对象的类有没有重写hashCode()和equals()方法


-------------------------

如果重写hashCode()就必须重写equals(),vice versa。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值