当前位置: 首页 > news >正文

Java IDEA学习之路:第五、六周课程笔记归纳

集合【开发的重点**】
一、概念
1. 集合:是一种工具,也是一种容器,用于存储数量不等的多个对象。
2. 集合相关的接口和类位于 java.util 包中。
3. 学习集合从以下 4个点入手:
(1) 集合接口的特点
(2) 集合接口中功能方法
(3) 集合接口对应的实现类
(4) 集合的遍历方式
二、Collection集合体系
1. 父接口:Collection接口
(1) 特点:存储任意类型Object对象。
(2) 方法:
a. boolean add(Object o):将o对象添加到集合中。【开发重点】
b. boolean contains(Object o):判断当前集合中是否包含 o元素,包含-true;否则-false.
c. boolean remove(Object o):将 o对象从当前集合中移除、删除。
d. int size() : 获取集合中有效元素的个数
(3) 实现类:没有直接的实现类,详见子接口。
(4) 遍历:详见子接口。
2. 子接口:List接口
(1) 特点:存储任意类型的Object对象,有序、有下标、元素允许重复。【基础重点】
下标的范围: 0 ~ 有效元素个数 - 1
(0 ~ size - 1)
(2) 方法:部分继承于父接口 Collection接口,其余为定义的方法:
a. boolean add(Object o):将元素存储到List集合,默认存储在集合的尾部。【重点】
b. add(int index,Object o):将指定的元素插入到集合对应的下标位置。
c. Object get(int index):返回指定下标对应集合元素。
d. Object remove(int index):删除指定下标对应的元素,返回值代表被删除的对象。
e. Object set(int index , Object o):将指定下标对应元素进行修改,修改为o对象。返回值代表被修改之
前的元素。
(3) 实现类:ArrayList,底层用数组实现的
a. ArrayList:底层数组实现的,查询操作时效率较高,增删操作效率较低。
JDK2.0版本,线程不安全,运行效率较高。
注意:JDK1.7版本,创建ArrayList对象时,并没有完成数组空间分配,而是第一次往集合中存储
元素(add方法时),才完成数组空间分配,数组的初始长度为10,每次扩充为1.5倍。
b. Vector: 底层数组实现的,查询操作时效率较高,增删操作效率较低。
JDK1.0版本,线程安全,效率较低。
c. LinkedList:底层链表实现,查询操作时效率较低,增删效率较高。
线程不安全,运行效率较高。
面试题目:写出ArrayList 和 LinkedList区别?
(4) 遍历:将集合中元素进行一一的访问。
a. 下标遍历:通过集合中的下标对集合元素进行一一访问
for(int i=0;i<集合名.size(); i++){
// 通过下标 i ,获取集合中每一个元素: get方法
}
b. forEach遍历:【开发应用重点】
for(数据类型 变量名 : 要遍历的集合名) {
// 直接利用变量名操作集合元素即可
}
注意:变量的数据类型取决于集合的泛型类型。
forEach遍历的底层原理:迭代器遍历
I. 获取迭代器对象:
Iterator it = 集合名.iterator();
II. 迭代器中方法:
① hasNext() : 判断迭代器中是否还有要操作的元素,有-true;没有-false。
② Object next() : 调用一次,返回迭代器中的下一个元素。
III.迭代器的遍历方式:
Iterator it = 集合名.iterator();
// 遍历迭代器
while(it.hasNext()){
// 通过next方法获取迭代器中下一个元素
System.out.println(it.next());
}
3. 泛型
(1) 泛型集合:安全性的集合,可以对集合中数据统一管理,并且强制约束集合的元素类型一致。【重点】
List<数据类型> 集合名 = new ArrayList<数据类型>();
(2) 泛型类:
a. 语法:
class 类名<泛型标识1,泛型标识2>{
// 将 泛型标识作为数据类型应用
}
注意:通常用:K/V/E/T等作为泛型标识。
b. 应用:在创建对象时,需要制定泛型的数据类型。
类名<数据类型> 对象名 = new 类名<数据类型>();
注意:前后数据类型要一致;
基本数据类型不能作为泛型的类型,需要应用基本数据类型对应的包装类型;
如果创建对象时,没有指定泛型的类型,则默认为Object类型;
如果定义类型有多个泛型标识,要么按顺序指定所有的泛型数据,要么都不指定。
4. 集合工具类:Collections
(1) Collections:用于操作集合元素的工具类,类中提供了大量的静态方法用于操作集合元素,例如元素排
序、倒置等操作。
(2) 常用的方法:
a. static void reverse(List list):将集合中元素进行倒置。
b. static void shuffle(List list):对集合中元素进行随机显示。
c. static void sort(List list): 对集合中元素进行排序。
注意:如果参与排序的集合中元素为自定义类型的对象,则对应的类需要实现
java.lang.Comparable接口,同时实现接口中compareTo方法,指定排序规则。
I. 第一种比较器 java.lang.Comparable接口,接口中有一个 int compareTo(T t) ,将当前对象this
和 t 进行比较,参与比较的对象对应的类需要实现此接口,同时实现此方法。-》内置比较器
II. 第二种比较器: java.util.Comparator 接口,接口中定义了 int compare(T o1, T o2) ,将o1和o2进
行比较,定义在参与比较对象的类的外面。 ---》外置比较器
a. 自定义类型的对象存储在HashSet中,如何保证 HashSet元素内容不重复?
i. 覆盖 hashCode方法
原则:必须保证相同内容的对象返回相同的哈希码值,为了提高效率,尽可能的做到,不同内容的
对象返回不同的哈希码值
覆盖准则:通常将所有的属性拼凑为一个 int 类型的结果进行返回。
案例: public int hashCode(){
return this.name.hashCode()+this.age.hashCode(); // age 包装类型
}
ii. 覆盖 equals方法
必须保证相同内容的对象返回true -> 拒绝添加到HashSet集合中。
b. HashSet保证元素不重复执行的原理:对象往HashSet集合中存储时,当前对象调用自身hashCode方
法,获取哈希码值,从而获取对应存储下标,如果存储下标上没有存储任何元素,则当前对象直接存
储,但是如果存储下标上已经有存储了其他对象,则调用equals方法,进行比较对象的内容是否相
同,equals方法的结果为true,代表相同内容的对象,则HashSet集合拒绝添加,equals方法结果为
false,则代表内容不同的对象,则成功添加到HashSet集合中。
(4) 遍历方式:forEach(底层原理迭代器遍历)
(5) SortedSet:是 Set的子接口,无序、无下标、对元素内容进行排序。【了解】
a. 常用的实现类TreeSet
注意:如果自定类型的对象存储在TreeSet中,需要实现 java.lang.Comparable 接口,同时实现:
compareTo方法,方法中指定排序的规则。compareTo返回值结果如果为0,则TreeSet视为
相同内容的对象。(TreeSet去除重复内容的对象,利用compareTo返回值,结果为0,相同对
象)
(6) LinkedHashSet:按照添加顺序进行集合元素存储,同时元素内容不允许重复。
注意:LinkedHashSet是 HashSet的子类,所以如果自定类型的对象存储在LinkedHashSet中,
为了保证元素内容不重复,则需要对象对应的类覆盖 hashCode方法 和 equals方法(要求
和 父类HashSet一致)。

 

http://www.dtcms.com/a/516221.html

相关文章:

  • 亚马逊云代理商:怎么使用AWS WAF?
  • 茂名建设企业网站建网站为什么要租空间
  • SOAP 实例详解
  • 【C++】多态深度解析:虚函数表与动态绑定的奥秘
  • 腾讯云网站建设教程企业名录app
  • 重庆做网站有哪些医疗网站建设
  • 语音识别技术之科大讯飞在线API
  • 从案例到实践:仓颉编程语言入门核心知识点全解析
  • VR环境中的概念
  • 闽侯县住房和城乡建设局官方网站猪八戒官网做网站专业吗
  • 十个app制作网站wordpress目录插件
  • PHP全电发票OFD生成实战
  • 利用DuckDB SQL求解集合数学题
  • 做新闻h5网站专业网站建设费用报价
  • 个人网站开发的环境海南省建设网站的公司电话号码
  • C++学习:C++11关于类型的处理
  • LayoutManager
  • 网站建设公司盈利分析网站建设需要哪些的ps
  • QML学习笔记(四十六)QML与C++交互:Q_PROPERTY宏映射
  • 培训学校 网站费用购物商城网站建设方案
  • 黑马商城day5-服务保护和分布式事务
  • 【实证分析】地市人才及资本创新要素流动数据集-含代码(2003-2023年)
  • 【学习系列】SAP RAP 16:RAP应用部署集成至Fiori Launchpad 【On-Premise】
  • 01-JavaScript基础
  • 万亿国债助力应急行业-多链路聚合通信路由在应急项目中的解决方案和技术需求
  • CSS3 超实用属性:pointer-events (可穿透图层的鼠标事件)
  • 企业做网站公司有哪些wordpress 积分支付
  • Java线程阻塞状态
  • 网站优化排名软件哪些最好99企业邮箱
  • dify之Web 前端工作流编排(Workflow Builder)