单例集合简单介绍

单例集合Collection

Collection是单列集合的根接口
各集合特点如下:

List系列集合:添加的元素是有序可重复有索引
ArrayList、LinekdList:有序、可重复、有索引。

set系列集合:添加的元素是无序不重复无索引
Hashset:无序、不重复、无索引;
LinkedHashset:有序、不重复、无索引。
Treeset:按照大小默认升序排序、不重复、无索引。

点击查看代码
//简单确认一下Collection集合的特点
ArrayList<String> list = new ArrayList<>(); //存取顺序一致,可以重复,有索引
list.add("java1");
list.add("java2");
list.add("java1");
list.add("java2");
System.out.println(list); //[java1, java2, java1, java2] 

HashSet<String> list = new HashSet<>(); //存取顺序不一致,不重复,无索引
list.add("java1");
list.add("java2");
list.add("java1");
list.add("java2");
list.add("java3");
System.out.println(list); //[java3, java2, java1] 

Collection遍历方式

Collection有三种遍历方式:迭代器,增强For以及ForEach遍历

迭代器方式:

  • 当调用iterator()方法获取迭代器时,当前指向第一个元素

  • hasNext()方法则判断这个位置是否有元素,如果有则返回true,进入循环

  • 调用next()方法获取元素,并将当月元素指向下一个位置,

  • 等下次循环时,则获取下一个元素,依此内推

点击查看代码

Collection<String> c = new ArrayList<>();
c.add("A");
c.add("B");
c.add("C");
c.add("D");
System.out.println(c); //[A, B, C, D]
//第一步:先获取迭代器对象
//解释:Iterator就是迭代器对象,用于遍历集合的工具)
Iterator<String> it = c.iterator();

//第二步:用于判断当前位置是否有元素可以获取
//解释:hasNext()方法返回true,说明有元素可以获取;反之没有
while(it.hasNext()){
    //第三步:获取当前位置的元素,然后自动指向下一个元素.
    String e = it.next();
    System.out.println(s);
}

增强for遍历集合:

格式:for(元素的数据类型 变量名 : 数组或集合){

}

点击查看代码
Collection<String> c = new ArrayList<>();
c.add("A");
c.add("B");
c.add("C");
c.add("D");

//1.使用增强for遍历集合
for(String s: c){
    System.out.println(s); 
}

//2.再尝试使用增强for遍历数组
String[] arr = {"张三", "李四", "王五"};
for(String name: arr){
    System.out.println(name);
}

forEach遍历集合

点击查看代码
Collection<String> c = new ArrayList<>();
c.add("A");
c.add("B");
c.add("C");
c.add("D");

//调用forEach方法
//由于参数是一个Consumer接口,所以可以传递匿名内部类
c.forEach(new Consumer<String>{
    @Override
    public void accept(String s){
        System.out.println(s);
    }
});

List系列集合

特点:添加的元素是有序、可重复、有索引。

遍历方式如下:

点击查看代码
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");

//1.普通for循环
for(int i = 0; i< list.size(); i++){
    //i = 0, 1, 2
    String e = list.get(i);
    System.out.println(e);
}

//2.增强for遍历
for(String s : list){
    System.out.println(s);
}

//3.迭代器遍历
Iterator<String> it = list.iterator();
while(it.hasNext()){
    String s = it.next();
    System.out.println(s);
}

//4.lambda表达式遍历
list.forEach(s->System.out.println(s));
常用方法:
点击查看代码
//1.创建一个ArrayList集合对象(有序、有索引、可以重复)
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("B");
list.add("D"); 
System.out.println(list); //[A, B, B, C]

//2.public void add(int index, E element): 在某个索引位置插入元素
list.add(2, "D");
System.out.println(list); //[A, B, D, B, C]

//3.public E remove(int index): 根据索引删除元素, 返回被删除的元素
System.out.println(list.remove(2)); //D
System.out.println(list);//[A, B, B, C]

//4.public E get(int index): 返回集合中指定位置的元素
System.out.println(list.get(3));

//5.public E set(int index, E e): 修改索引位置处的元素,修改后,会返回原数据
System.out.println(list.set(3,"E")); //C
System.out.println(list); //[A, B, B, E]

Set系列集合

特点:添加的元素是无序、不重复、无索引。

HashSet集合

HashSet去重原理:

当我们往HashSet集合中存储元素时,HashSet集合底层调用了元素的两个方法:一个是hashCode方法获取元素的hashCode值(哈希值);另一个是调用了元素的equals方法,用来比较新添加的元素和集合中已有的元素是否相同。

  • 只有新添加元素的hashCode值和集合中以后元素的hashCode值相同、新添加的元素调用equals方法和集合中已有元素比较结果为true, 才认为元素重复。
  • 如果hashCode值相同,equals比较不同,则以链表的形式连接在数组的同一个索引为位置

TreeSet集合

TreeSet集合的特点是可以对元素进行排序,但是必须指定元素的排序规则。

如果往集合中存储String类型的元素,或者Integer类型的元素,它们本身就具备排序规则,所以直接就可以排序。

点击查看代码
//第一步:先让Student类,实现Comparable接口
//注意:Student类的对象是作为TreeSet集合的元素的
public class Student implements Comparable<Student>{
    private String name;
    private int age;
    private double height;
	//无参数构造方法
    public Student(){}
    //全参数构造方法
    public Student(String name, int age, double height){
        this.name=name;
        this.age=age;
        this.height=height;
    }
    //...get、set、toString()方法自己补上..

//第二步:重写compareTo方法
//按照年龄进行比较,只需要在方法中让this.age和o.age相减就可以。
/*
原理:
在往TreeSet集合中添加元素时,add方法底层会调用compareTo方法,根据该方法的
结果是正数、负数、还是零,决定元素放在后面、前面还是不存。
*/
@Override
public int compareTo(Student o) {
    //this:表示将要添加进去的Student对象
    //o: 表示集合中已有的Student对象
    return this.age-o.age;
}
}
posted @ 2024-01-26 20:58  海a  阅读(32)  评论(0)    收藏  举报