java集合的一些心得

---|Collection: 单列集合

           ---|List: 有存储顺序, 可重复

              ---|ArrayList:    数组实现, 查找快, 增删慢

                                 由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。

 数组是可以直接按索引查找, 所以查找时较快

              ---|LinkedList:   链表实现, 增删快, 查找慢

                                   由于链表实现, 增加时只要让前一个元素记住自

 己就可以, 删除时让前一个元素记住后一个元

 素, 后一个元素记住前一个元素. 这样的增删效

  率较高但查询时需要一个一个的遍历, 所以效率较低

              ---|Vector:   和ArrayList原理相同, 但线程安全, 效率略低

                               和ArrayList实现方式相同, 但考虑了线程安全问

题, 所以效率略低

           ---|Set: 无存储顺序, 不可重复

              ---|HashSet

              ---|TreeSet

              ---|LinkedHashSet

---| Map: 键值对

       ---|HashMap

       ---|TreeMap

       ---|HashTable

 什么时候该使用什么样的集合

Collection

我们需要保存若干个对象的时候使用集合。

 

List

 

 

如果我们需要保留存储顺序, 并且保留重复元素, 使用List.

如果查询较多, 那么使用ArrayList

如果存取较多, 那么使用LinkedList

如果需要线程安全, 那么使用Vector

 

 

Set

 

如果我们不需要保留存储顺序, 并且需要去掉重复元素, 使用Set.

如果我们需要将元素排序, 那么使用TreeSet

如果我们不需要排序, 使用HashSet, HashSet比

TreeSet效率高.

如果我们需要保留存储顺序, 又要过滤重复元素, 那么使用LinkedHashSet


java各种类的方法一般是包头不包尾的。

可以用for(Book book : list)对集合进行遍历,但遍历时不能对集合做出删除的方法。

删除时尽量不要通过索引值进行删除,而应该用变量名来删除。


若想要删除则可以把要删除的对象存储到另一个集合中,再通过list.removeAll(list2)来删除。
使用上面的写法就会报上面的ConcurrenModificationException异常,原因是,集合不可以一边遍历一边删除。


5:注意在对集合进行迭代过程中,不允许出现迭代器以外的对元素的操作,
因为这样会产生安全隐患,java会抛出异常并发修改异常(ConcurrentModificationException),
普通迭代器只支持在迭代过程中的删除动作。


通过两个接口方法来完成管理员与普通用户的区别。


如果是List集合,想要在迭代中操作元素可以使用List集合的特有迭代器ListIterator,
该迭代器支持在迭代过程中,添加元素和修改元素。

运用于集合中的对象排序:
Collections类的方法应用:Collection.sort(list[集合], new PriceComparator()[新建的比较器对象])

Hashmap之类的哈希表在比较两个元素是否相同时,若比较的是int类型则:
@Override
public int hashCode() {
return this.id;
}

@Override
public boolean equals(Object obj) {
Person p  = (Person)obj;
return this.id==p.id;
}
    若比较的是String类型:
@Override
public int hashCode() {
return this.password.hashCode();
}

@Override
public boolean equals(Object obj) {
Person p  = (Person)obj;
return this.password.equals(p.password);
}


红黑叉树的集合方法可以通过传入一个比较器来比较两个元素是否相等。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值