---|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)对集合进行遍历,但遍历时不能对集合做出删除的方法。
删除时尽量不要通过索引值进行删除,而应该用变量名来删除。
使用上面的写法就会报上面的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);
}
红黑叉树的集合方法可以通过传入一个比较器来比较两个元素是否相等。