1、集合的代表是?
●Collection接口 。
2、Collection集合分 了哪2大常用的集合体系?
●List系列集合: 添加的元素是有序、可重复、有索引。
●Set系列集合:添加的元素是无序、不重复、无索引。
3、如何约定集合存储数据的类型,需要注意什么?
●集合支持泛型。
●集合和泛型不支持基本类型,只支持引用数据类型。●集合不支持使用索引查找数据
- public class ColectionDemo {
- public static void main(String[] args) {
- //有序可重复有索引
- Collection list = new ArrayList();
- list.add("Java");
- list.add("Java");
- list.add("Mybatis");
- list.add(23);
- list.add(23);
- list.add(false);
- list.add(false);
- System.out.println(list);
- //无序不重复 无索引
- Collection list1 = new HashSet() ;
- list1.add("Java");
- list1.add("Java");
- list1.add("Mybatis");
- list1.add(23);
- list1.add(23);
- list1.add(false);
- list1.add(false);
- System.out.println(list1);
-
- //有序不重复 无索引
- Collection list2 = new TreeSet() ;
- list2.add("Java1");
- list2.add("Java");
- list2.add("Java");
- list2.add("Mybatis");
- list2.add("1");
- System.out.println(list2);
-
- //支持泛型
- Collection
list3 = new ArrayList<>() ; - list3.add("Java1");
- list3.add("Java");
- list3.add("Java");
- // list3.add(1);
- System.out.println(list2);
-
- }
- }
Collection常用API

- public class ColectionDemo {
- public static void main(String[] args) {
- Collection list = new ArrayList();
- list.add("Java");
- list.add("Java");
- list.add("Java");
- System.out.println(list);
- // list.clear();
- System.out.println(list);
- System.out.println("删除成功返回true,默认删除第一个"+list.remove("Java"));
- System.out.println(list);
- System.out.println(list.isEmpty());
- System.out.println(list.size());
- System.out.println(list.toArray());
- }
- }
Collection迭代器
- public class ColectionDemo {
- public static void main(String[] args) {
- Collection
c = new ArrayList<>(); - c.add("Java1");
- c.add("Java3");
- c.add("Java3");
- Iterator
i = c.iterator(); //创建一个迭代器对象,泛类型与数组保持一致,默认起始位置为0 - // System.out.println("判断是否还有元素"+i.hasNext());
- // System.out.println("取出第一个数"+i.next());
- // System.out.println("取出第二个数"+i.next());
- // System.out.println("取出第三个数"+i.next());
- // System.out.println("数量不足,会越越界报错"+i.next());
- while (i.hasNext()){
- System.out.println(i.next());
- }
-
- }
- }
Colection之foreach
- 1、增强for可以遍历哪些容器? ●既可以遍历集合也可以遍历数组。
- 2、增强for的关键是记住它的遍历格式
- for(元素数据类型 变量名:数组或者Collection集合) {
- //在此处使用变量即可,该变量就是元素
- }
-
- public class ColectionDemo {
- public static void main(String[] args) {
- Collection
c = new ArrayList<>(); - c.add("Java1");
- c.add("Java3");
- c.add("Java3");
- for (String s : c) {
- System.out.println("s是变量名" + s);
- }
- double[] d = {1.1,2.1,3.1};
- for (double v : d) {
- System.out.println("v是变量名" + v);
- }
- }
- }
-
-
- public class ColectionDemo {
- public static void main(String[] args) {
- Collection
c = new ArrayList<>(); - c.add("Java1");
- c.add("Java3");
- c.add("Java3");
- // forEach几种方法
- c.forEach(new Consumer
() { - @Override
- public void accept(String s) {
- System.out.println(s);
- }
- });
-
- c.forEach((String s)->System.out.println(s));
- c.forEach(s->System.out.println(s));
- c.forEach(System.out::println);//最终简写,实际效果一样
- }
- }
- public class ColectionDemo {
- public static void main(String[] args) {
-
- List
list = new ArrayList<>(); - list.add("Java");
- list.add("Java");
- list.add("MySQL");
- list.add("MySQL");
- // 2.在某个索引位置插入元素。
- list.add( 2,"HTML");
- System.out.println(list);
- // 3.根据索引删除元素,返回被删除元素
- System.out.println(list.remove(2));
- System.out.println(list);
- // 4. 根据索引获取元素:public E get(int index): 返回集合中指定位置的元素。
- System.out.println(list.get(2));
- // 5.修改索引位置处的元素: public E set(int index, E element)
- //返回修改前的数据
- System.out.println(list.set(1,"高斯林"));
- System.out.println(list);
-
-
- }
- }
-
- public class ColectionDemo {
- public static void main(String[] args) {
- //栈,先进后出
- LinkedList
stack = new LinkedList<>(); - stack.addFirst("第一颗子弹");
- stack.addFirst("第二颗子弹");
- stack.addFirst("第三颗子弹");
- stack.addFirst("第四颗子弹");
- System.out.println(stack.removeFirst());
- System.out.println(stack.removeFirst());
- System.out.println(stack.removeFirst());
- System.out.println(stack);
-
- //队列,先进先出
- LinkedList
queue = new LinkedList<>(); - queue.addLast("1号");
- queue.addLast("2号");
- queue.addLast("3号");
- queue.addLast("4号");
- System.out.println(queue.removeFirst());
- System.out.println(queue.removeFirst());
- System.out.println(queue);
- }
- }
自定义泛型
- 泛型类
- 作用:强制类下的方法只能使用同一种引用类型
- public class FanXing
{ - public void add(E e){
- }
- public void remove(E e){
-
- }
- }
-
- public class Test {
- public static void main(String[] args) {
- FanXing
f = new FanXing<>(); - f.add("a");
- f.remove("a");
- }
- }
- ======================================================================
- 泛型方法
- 作用:方法可以接收任意类型的数据,使得更加有通用型
-
- public class Test {
- public static void main(String[] args) {
- Integer[] i = {1,2,3,4,5};
- prinaArray(i);
- }
- /*
- 定义一个可以传任意类型的数组
- */
- public static
void prinaArray(T[] arry) { - if(arry != null){
- StringBuilder h = new StringBuilder("[");
- for (int i = 0; i < arry.length; i++) {
- h.append(i == arry.length -1 ? arry[i]: arry[i] + ",");
- }
- h.append("]");
- System.out.println(h);
- }else {
- System.out.println(Arrays.toString(arry));
- }
- }
- }
- ==================================================
- 泛型接口
- 作用:泛型接口可以让实现类选择当前功能需要操作的数据类型
- //定义一个泛型接口
- public interface FangXing
{ - void add(E e);
- void delete(int id);
- void update(E e);
- E queryId(int id);
- }
-
- //定义一个类型只可以接受Teacher
-
- public class TeacherData implements FangXing
{ - @Override
- public void add(Teacher teacher) {
- System.out.println("加了一个老师信息");
- }
-
- @Override
- public void delete(int id) {
-
- }
-
- @Override
- public void update(Teacher teacher) {
-
- }
-
- @Override
- public Teacher queryId(int id) {
- return null;
- }
- }
-
- //定义一个Teacher类
- public class Teacher{
- }
-
- //使用
- public class Test {
- public static void main(String[] args) {
- Teacher t = new Teacher();
- TeacherData TD = new TeacherData();
- TD.add(t);
- }
- }
-
-
使用泛型
- 泛型的上下限:
- extends Car> >>?必须是Car或者其子类泛型:上限(常用)
- super Car> >>?必须是Car或者其父类泛型:下限
-
- import java.util.ArrayList;
-
- public class UseFangXing {
- public static void main(String[] args) {
- ArrayList
ben = new ArrayList<>(); - ArrayList
bao = new ArrayList<>(); - ArrayList
dog = new ArrayList<>(); - ben.add(new Benchi());
- bao.add(new Baoma());
- dog.add(new Dog());
- go(ben);
- go(bao);
- // go(dog); 无法添加
- }
- public static void go(ArrayList extends Car> allCar){
- System.out.println("所有车都可以参加" + allCar.toString());
- }
- }
-
- class Benchi extends Car{
- private String name = "奔驰";
- @Override
- public String toString() {
- return "Benchi{" +
- "name='" + name + '\'' +
- '}';
- }
- }
- class Baoma extends Car{
- private String name = "宝马";
- @Override
- public String toString() {
- return "Baoma{" +
- "name='" + name + '\'' +
- '}';
- }
- }
- class Dog{
- private String name = "狗";
- @Override
- public String toString() {
- return "Dog{" +
- "name='" + name + '\'' +
- '}';
- }
- }
- class Car {}
Set系列集合特点
●无序:存取顺序不-致
●不重复:可以去除重复
●无索引: 没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取元素。
Set集合实现类特点
●HashSet: 无序、不重复、无索引。
●LinkedHashSet: 有序、不重复、无索引。
●TreeSet: 排序、不重复、无索引。
-
- public class Test {
- public static void main(String[] args) {
- // 无序
- Set
sets = new HashSet<>(); - sets.add("html");
- sets.add("java");
- sets.add("java");
- sets.add("Mysql");
- System.out.println(sets);
- // 有序
- Set
sets1 = new LinkedHashSet<>(); - sets1.add("html");
- sets1.add("java");
- sets1.add("java");
- sets1.add("Mysql");
- System.out.println(sets1);
- // 排序
- Set
sets2 = new TreeSet<>(); - sets2.add("html");
- sets2.add("java");
- sets2.add("java");
- sets2.add("Mysql");
- System.out.println(sets2);
- System.out.println(sets.hashCode());// object提供了hashCode,代表每个对象都有一个hash值,且同一个对象值是保持不变的
-
- }
- }
-
- public class Test {
- public static void main(String[] args) {
- //底层原理是hash+数组+链表+红黑树,先计算对象的hash值后取mod,然后得到的索引插入数组,
- //如果为null直接插入,不为null再用equals去判断数据有没有重复,有重复就不插入,不重复就
- //放入该数据,原先数据根据链表方式接入到新的数据,
- //因此自定义的类使用set集合,需要重写hashcode方法,只要类的值一样,
- //hash值就一样,则不重复添加到集合里面
- Set
sets = new HashSet<>(); - sets.add(new Student("小红",19,"男"));
- sets.add(new Student("小红",19,"男"));
- sets.add(new Student("小A",19,"男"));
- System.out.println(sets);
- }
- }
-
-
- class Student {
- private String name;
- private Integer age;
- private String sex;
-
- public Student() {
- }
-
- public Student(String name, Integer age, String sex) {
- this.name = name;
- this.age = age;
- this.sex = sex;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- Student student = (Student) o;
- return Objects.equals(name, student.name) && Objects.equals(age, student.age) && Objects.equals(sex, student.sex);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(name, age, sex);
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public Integer getAge() {
- return age;
- }
-
- public void setAge(Integer age) {
- this.age = age;
- }
-
- public String getSex() {
- return sex;
- }
-
- public void setSex(String sex) {
- this.sex = sex;
- }
-
- @Override
- public String toString() {
- return "Student{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", sex='" + sex + '\'' +
- '}';
- }
- }
- package com.ruqi.xiushifu.demoset;
-
- import java.util.*;
-
- public class Test {
- public static void main(String[] args) {
- //自定义类的排序规则,使用set自带的Comparator方法,也可以在Student类中自定义
- // Set
Students = new TreeSet<>(new Comparator() { - // @Override
- // public int compare(Student o1, Student o2) {
- return o1.getAge() - o2.getAge(); //表示按年龄升序,如果相等去重
- // return o1.getAge() - o2.getAge() >= 0 ? 1 : -1 ; //表示按年龄升序,不去重
- // }
- // });
- Set
Students = new TreeSet<>((o1, o2) -> o1.getAge() - o2.getAge() >= 0 ? 1 : -1); //简写 - Students.add(new Student("小A",11,"男",12.11));
- Students.add(new Student("小B",11,"男",12.01));
- Students.add(new Student("小C",12,"男",12.71));
- Students.add(new Student("小D",14,"男",12.01));
- System.out.println(Students);
- }
- }
-
- class Student implements Comparable
{ - private String name;
- private Integer age;
- private String sex;
- private double height;
-
- public Student() {
- }
-
- public Student(String name, Integer age, String sex , double height) {
- this.name = name;
- this.age = age;
- this.sex = sex;
- this.height = height;
- }
-
- public double getHeight() {
- return height;
- }
-
- public void setHeight(double height) {
- this.height = height;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public Integer getAge() {
- return age;
- }
-
- public void setAge(Integer age) {
- this.age = age;
- }
-
- public String getSex() {
- return sex;
- }
-
- public void setSex(String sex) {
- this.sex = sex;
- }
-
- @Override
- public String toString() {
- return "Student{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", sex='" + sex + '\'' +
- ", height=" + height +
- '}';
- }
-
- @Override
- public int compareTo(Student o) {
- return this.age - o.age;
- }
- }
-