Java泛型和Set集合

泛型
  • 泛型:标识着集合中存储元素的数据类型
  • 写法:<数据类型>
  • 泛型类声明位置:类名<泛型>
  • 泛型类中创建对象时,会给泛型赋值类型
  • 一个类中有多个泛型,需要在方法上进行泛型声明,这个泛型将会在该方法被调用时被赋值

  • 好处:
    1.保证数据的安全性(提示方法中传入参数类型)
    2.避免进行向下转型(类型强转)
    3.将运行时的错误 转化编译时报错

  • 创建一个集合带有泛型

ArrayList<String> list = new ArrayList<String>();

注意:前后泛型的类型要一致或者不填后面的,不填后面的话默认前后一致.

  • 泛型 ? extends E 相当于?是E的子类或者本类,可以限定参数的类型(向下限定)
        ArrayList<Person> list1 = new ArrayList<>();
        list1.add(new Person("东东", 11));
        ArrayList<Student> list2 = new ArrayList<>();
        list2.add(new Student("西西", 22));
        //  addAll(Collection ? extends E)
        //  E list1的泛型
        //  ? list2的泛型
        list1.addAll(list2);
        System.out.println(list1);
  • 泛型接口,泛型类型在接口的实现类上确定
    interface InterA<G>{
    public abstract void fun (G g);
}
//  泛型类型可以在接口的实现类上确定
class InterAImpl implements InterA<String>{
    @Override
    public void fun(String g) {
    }
  • 创建泛型类的对象
Worker<String> worker = new Worker<>();
  • 多参数方法 int …num
    1.传入多个值用逗号隔开
    2.直接传入数组也行
    public static void print(int ... num) {
        for (int i = 0; i < num.length; i++) {
            System.out.println(num[i]);
        }
    }

注意::多参数要放在方法参数列表的最后一个

  • Arrays.asList可以将数组转成集合
    String[] strings = {"东东","南南","西西"};
        List<String> list = Arrays.asList(strings);
        System.out.println(list);

注意:该方法转完集合后,不能对集合进行长度修改.

  • 迭代器删除

        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("b");
        list.add("b");
        list.add("b");
        //  迭代器删除
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String str = iterator.next();
            if (str.equals("b")) {
                //  删除(使用迭代器的删除方法)
                iterator.remove();
            }
        }
        System.out.println(list);

输出: a

  • For循环删除
        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("b");
        list.add("b");
        list.add("b");
        //  循环删除 "b"
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).equals("b")) {
                list.remove(i--);
            }
        }
        System.out.println(list);

输出: a

  • Collections.swap集合工具类提供的交换方法
ArrayList<Student> list = new ArrayList<>();
        list.add(new Student("东东", 20));
        list.add(new Student("西西", 19));
        list.add(new Student("北北", 21));
        list.add(new Student("南南", 18));
        list.add(new Student("中中", 22));
        //  冒泡排序法
        for (int i = 0; i < list.size()-1; i++) {
            for (int j = 0; j < list.size()-1-i; j++) {
                //  取出要比较的两个学生
                Student s1 = list.get(j);
                Student s2 = list.get(j +1 );
                if (s1.getAge() < s2.getAge()) {
                //  集合工具类 提供的 交换方法
                Collections.swap(list, j, j+1);             
            }
        }   
    }
                System.out.println(list);
Set集合
  • 特点:
  • 无序
  • 无下标
  • 不重复(系统每创建一个对象,都会为这个对象分配一个 hashCode值.当向HashSet集合中保存对象时,系统会先比较HashCode值是否相同.
    相同:
    会调用对象的equals方法进行比较,如果equals方法比较也相同,那么就不存.
    不相同:
    如果HashCode不相同,相对于不是一个对象,直接把该对象存入集合中(也不会调用equals方法)

猜你喜欢

转载自blog.csdn.net/guxin0729/article/details/82467604