单例集合简单介绍
单例集合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;
}
}

浙公网安备 33010602011771号