欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java学习笔记-全栈-Java基础-08-容器中的重点

程序员文章站 2022-06-19 21:17:17
...

泛型

泛型使遍历时不需要强制转换,帮助建立类型安全的集合。

通过remove理解“引用”

Collections类都有个remove方法:将对象从容器中移除。
但并非删除该对象,移除之后,该对象依旧还在。因为容器存放的时该对象的引用地址,移除的只是地址,实际上对象本身还在内存中。

“除了基本类型,都是引用数据类型,引用数据类型只是引用地址,而非该对象本身”

总结

Java学习笔记-全栈-Java基础-08-容器中的重点

1.Collection接口:
  • 1.List的元素有顺序,可重复,包括:
    • a)ArrayList:查询效率高,增删效率低,线程不安全
    • b)LinkedList:查询效率低,增删效率高,线程不安全
    • c)Vector:ArrayList的线程安全版,效率低
  • 2.Set的元素无顺序,不可重复,包括:
    • a)HashSet:查询、增删效率高
    • b)TreeSet:用TreeMap的Key实现的,内部需要对存储的元素进行排序,因此,对应的类需要实现Comparable接口(编写比较逻辑),这样才能根据compareTo()方法比较对象之间的大小,才能进行内部排序。
2. Map
  • Map,key-value,key不可重复,value可以,包括
    • a)HashMap:最常用,效率最高
    • b)TreeMap:自动按照key升序排列
3. 操作
  • 使用Iterator遍历容器
  • 类 java.util.Collections 提供了对Set、List、Map操作的方法(排序,填充,查找,打乱等)

重写equals、hashCode方法(重点)

  • 如下情况,(可能)需要重写equals/hashCode
    • a)要将自定义的对象放入HashSet中处理
    • b)要将自定义的对象作为HashMap的key
    • c)将自定义对象放入容器中后,可能会调用remove、contains时(实际上使用集合装对象的时候,约定需要重写这两个方法)

原因:

上述三个情况都隐式的涉及到了“对象比较

  • a\b中:HashSet\HashMap的key都是惟一的(所以内部实现就应该存在比较),若放入自定义对象,可能会出现“应该相同的对象但不相同”的情况,比如自定义对象id=1的有两个(实际业务我们需要他们相同),但他们在HashSet和HashMap的key中并不相同,因此需要重写equals(id相等就判断相等)和HashCode(将hash的对象都设置为ID即可保证他们HashCode一致)。

  • c中:remove和contains都涉及到对象的识别(即比较),因此需要重写equals才能识别。

  • 默认的equals比较的是对象内存地址,hashCode求的是对象内存地址转换成的数,实际也是内存地址。

相关标签: 全栈-Java基础