Java集合框架详解2

简介: Java集合框架详解2

三、泛型


  • 本质是参数化类型,把类型作为参数传递


  • 常见形式有泛型类、泛型接口、泛型方法


  • 语法 T成为类型占位符,表示一种引用类型,可以写多个逗号隔开


  • 好处 1. 提高代码重用性 2. 防止类型转换异常,提高代码安全性


泛型类


// 写一个泛型类
public class MyGeneric<T>{
  //使用泛型T
  //1 创建变量
  T t;
  //2 泛型作为方法的参数
  public void show(T t){
    sout(t);
  }
  //3 泛型作为方法的返回值
  public T getT(){
    return t;
  }
}
// 使用泛型类
public class TestGeneric{
  public static void main(String[] args){
    //使用泛型类创建对象
    // 注意: 1. 泛型只能使用引用类型
    //       2. 不用泛型类型对象之间不能相互赋值
    MyGeneric<String> myGeneric = new MyGeneric<String>();
    myGeneric.t = "hello";
    myGeneric.show("hello world!");
    String string = myGeneric.getT();
    MyGeneric<Integer> myGeneric2 = new MyGeneric<Integer>();
    myGeneric2.t = 100;
    myGeneric2.show(200);
    Integer integer = myGeneric2.getT();
  }
}


3.1 泛型接口


语法:接口名


注意:不能泛型静态常量


3.2 泛型方法


语法: 返回值类型


public class MyGenericMethod{
  //泛型方法
  public <T> T show(T t){
    sout("泛型方法" + t);
    return t;
  }
}
//调用
MyGenericMethod myGenericMethod = new MyGenericMethod();
myGenericMethod.show("字符串");// 自动类型为字符串
myGenericMethod.show(200);// integer类型
myGenericMethod.show(3.14);// double类型


3.3 泛型集合


概念:参数化类型、类型安全的集合,强制集合元素的类型必须一致


特点:


  • 编译时即可检查,而非运行时抛出异常


  • 访问时,不必类型转换(拆箱)


  • 不同泛型之间应用不能相互赋值,泛型不存在多态


四、Set集合


特点:无序、无下标、元素不可重复


方法:全部继承自Collection中的方法


增、删、遍历、判断与collection一致


4.1 HashSet 【重点】


存储结构:哈希表(数组+链表+红黑树)


存储过程(重复依据)


  1. 根据hashCode计算保存的位置,如果位置为空,直接保存,若不为空,进行第二步


  1. 再执行equals方法,如果equals为true,则认为是重复,否则形成链表


特点


  • 基于HashCode计算元素存放位置


  • 利用31这个质数,减少散列冲突


  • 31提高执行效率 31 * i = (i << 5) - i 转为移位操作


  • 当存入元素的哈希码相同时,会调用equals进行确认,如果结果为true,则拒绝后者存入


新建集合 HashSet<String> hashSet = new HashSet<String>();

添加元素 hashSet.add( );

删除元素 hashSet.remove( );

遍历操作


  1. 增强for for( type type : hashSet)
  2. 迭代器 Iterator<String> it = hashSet.iterator( );

判断 hashSet.contains( );hashSet.isEmpty();


4.2 TreeSet


特点


  • 基于排列顺序实现元素不重复


  • 实现SortedSet接口,对集合元素自动排序


  • 元素对象的类型必须实现Comparable接口,指定排序规则


  • 通过CompareTo方法确定是否为重复元素


存储结构:红黑树


创建集合 TreeSet<String> treeSet = new TreeSet<>()

添加元素 treeSet.add();

删除元素 treeSet.remove();

遍历 1. 增强for 2. 迭代器

判断 treeSet.contains();


补充:TreeSet集合的使用


Comparator 实现定制比较(比较器)

Comparable 可比较的

// 重写compare
@override
public int compare(Person o1, Person o2){
  int n1 = o1.getAge()-o2.getAge();
  int n2 = o1.getName().comareTo(o2.getName());
  return n1 == 0 ? n2 : n1;
}


相关文章
|
17天前
|
安全 Java 大数据
|
15天前
|
安全 Java 开发者
【JAVA】哪些集合类是线程安全的
【JAVA】哪些集合类是线程安全的
|
15天前
|
Java
【JAVA】怎么确保一个集合不能被修改
【JAVA】怎么确保一个集合不能被修改
|
2天前
|
存储 安全 Java
Java一分钟之-集合框架进阶:Set接口与HashSet
【5月更文挑战第10天】本文介绍了Java集合框架中的`Set`接口和`HashSet`类。`Set`接口继承自`Collection`,特征是不允许重复元素,顺序不确定。`HashSet`是`Set`的实现,基于哈希表,提供快速添加、删除和查找操作,但无序且非线程安全。文章讨论了`HashSet`的特性、常见问题(如元素比较规则、非唯一性和线程安全性)以及如何避免这些问题,并提供了代码示例展示基本操作和自定义对象的使用。理解这些概念和注意事项能提升代码效率和可维护性。
9 0
|
2天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
7 0
|
4天前
|
存储 安全 算法
掌握Java并发编程:Lock、Condition与并发集合
掌握Java并发编程:Lock、Condition与并发集合
11 0
|
4天前
|
前端开发 安全 Java
使用Spring框架加速Java开发
使用Spring框架加速Java开发
9 0
|
4天前
|
存储 安全 Java
深入理解Java集合框架
深入理解Java集合框架
9 0
|
9天前
|
存储 安全 Java
Java集合的分类有哪些?
Java中的集合就像一个容器,专门用来存储Java对象,这些对象可以是任意的数据类型,并且长度可变。这些集合类都位于java.util包中,在使用时一定要注意导包的问题,否则会出现异常。
36 10
|
12天前
|
安全 Java
循环的时候去删除集合中的元素 java.util.ConcurrentModificationException
循环的时候去删除集合中的元素 java.util.ConcurrentModificationException