黑马程序员------Collection集合汇总

来源:互联网 发布:超级sql注入工具 编辑:程序博客网 时间:2024/04/28 01:40
                                                                                ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

  collection 总集合

  1:List 是一个有序的集合.可重复

  1.1:arrayList 没有特殊方法,底层是一个数组 查询快 增删慢,线程不安全,效率高

  1.2:vector有特殊的增加和遍历方法,并且集合在遍历的时候采用的是索引迭代的特殊方法,底层是一个数组,查询快 增删慢,线程安全, 但是效率低  不经常用

  a:添加

  public void addElement(E obj)        --    后期被add()替代

  b:获取

  public E elementAt(int index)        --    后期被get()替代

  c:遍历

  public Enumeration elements()    --  后期被iterator()替代

  1.3:LinkedList底层是一个链表,查询慢  增删快 线程不安全,效率低

  LinkedList 对顺序访问进行优化,向List 中间插入与移除的开销并不大,具有addFrist(),addLast(),getFirst,getLast,removeFirst和removeLast().这些方法使得LinkedList可当作堆栈/队列/双向队列.

  2:Set无序 唯一.------加入Set 的Object必须定义equals()方法

  使用HashSet/TreeSet时,必须为类定义equals();而HashCode()是针对HashSet,作为一种编程风格,当覆盖equals()的时候,就应该同时覆盖hashCode().

  2.1:HashSet保证唯一的方法:

  为快速查找而设计的Set ,存入HashSet对象必须定义hashCode().

  String类型的可以直接判断,通过首字母的哈希值自动排列

  如果是引用数据类型.可以重写对象比较的Equals方法和HashCode方法

  2.1.1:LinkedHashSet 底层数据结构是一个哈希表和链表,由链表保证顺序,由哈希表保证数据的不可重复性

  打印是按照添加的顺序来打印,没有了

  2.2treeSet底层数据结构是一个红黑树

  如何保证集合顺序  由自然排序

  就是引用数据类型的类中自己写有比较的算法(Comparator接口的重写:先继承接口,然后重写接口中的方法)

  set在添加的时候会判断是否相同  相同就不添加,不同就添加

  集合自己排序

  这个是采用集合自己判断,方法是:采用匿名内部类的方法重写接口Comparator的方法,然后在创建集合对象时放入集合中

  如何保证唯一性:

  看返回值的大小,如果返回值大于0就是从大到小

  如果小于0 也是从大到小,

  如果等于0 ,两个集合元素相同,不添加

  重写Comparator的方法

  先看treeSet的comparatorpublic int compare(T o1,T o2){

  int result = o1.getAge() - o2.getAge();

  if (result == 0) {

  result = o1.getNameString().compareTo(o2.getNameString());

  }

  return result;

  }
的方法public Comparator comparator()

  返回值类型是一个Comparator的接口类型,因为直接返回的就是一个0,所以需要重写接口方法,点击进入接口查看abstract的方法只有两个

  我们需要重写compare的方法即可

  

public int compare(T o1,T o2){  int result = o1.getAge() - o2.getAge();  if (result == 0) {  result = o1.getNameString().compareTo(o2.getNameString());  }  return result;  }

  判断结果即可

  集合自己排序:

  new comparator<>(){

  public int compare(T o1,T o2){

  int result = o1.getAge() - o2.getAge();

  if (result == 0) {

  result = o1.getNameString().compareTo(o2.getNameString());

  }

  return result;

  }//重写接口的方法

  };

  3:针对Collection集合我们到底使用谁呢?(掌握)

  唯一吗?

  是:Set

  排序吗?

  是:TreeSet

  否:HashSet

  如果你知道是Set,但是不知道是哪个Set,就用HashSet。

  否:List

  要安全吗?

  是:Vector

  否:ArrayList或者LinkedList

  查询多:ArrayList

  增删多:LinkedList

  如果你知道是List,但是不知道是哪个List,就用ArrayList。

  如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。

  如果你知道用集合,就用ArrayList。


0 0