游客您好
第三方账号登陆
  • 点击联系客服

    在线时间:8:00-16:00

    客服电话

    020-85534346

    电子邮件

    81058337@qq.com
  • 码云社APP

    随时掌握码云社动态

  • 扫描二维码

    关注砺锋微信公众号

推荐阅读
李少波 颇具潜力
未知星球 | 未知职业
  • 关注0
  • 粉丝2
  • 帖子18

JAVASE Day15李少波——学习心得

[复制链接]
李少波 发表于 2020-7-31 19:44:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
学习心得
7.31笔记
上午:
一、集合类
集合是Java中存放对象的容器,存放于java. util包中。提到容器不难想到数组,集
合类和数组的不同之处是,数组的长度是固定的,集合的长度是可变的。。
1
(1)Collection:单列集合的根接口,Java 中没有提供这个接口的直接实现类。但是却
让其被继承产生了两个子接口,就是SetList. Set 是一个无序集合,不能包含重复元
素。List是一个有序集合,可以包含重复的元素,提供了按索引访问的方式。Set接口的主
要实现类有HashSetTreeSet; List 接口的主要实现类有ArrayListLinkedList.
列集合Collection的体系如图9.1所示。。
(2)Map:双列集合的根接口,所谓双列是指Map集合中存储的每- - 个元素都包括键(key)
和值(value)两个要"。键(key) (value)之间具有映射关系,通过指定的键(key)
即可查找到对应的值(value),例如根据一- 个学生的学号就能找到对应的学生。Map 不能包
含重复的key,但是可以包含相同的value. Map的主要实现类有HashMapTreeMap.双列
集合Map的体系结构如图9.2所示。
2、Collection接口的方法
3List接口及其实现类
实现了List 接口的对象又称为List集合, List集合中存放的对象是有序的,可以重复的,
所谓有序是指元素的存入顺序与取出顺序是-一致的。List 集合中的元素线性排列,通过索引
来访问集合中的元素。。
List接口的实现类主要有Arraylist LinkedList,前者底层采用可变长度的数组,查找速
度快,但增删效率比较低,后者采用链表的结构,增删效率高,但查找速度较慢。。
4ArrayList集合
ArrayList是应用最广泛的一一个集合, 它是List接口中的一一个实现类。ArrayList 集合底层
是采用数组来保存元素,可以当做是一一个长度可变的数组,并且允许同时保存不同类型的元
素,包括null,可以根据索引对集合进行快速的随机访问,查找效率高,但每次添加或删除
元素时都会导致重新创建新的数组,往ArrayList集合指定位置插入或删除数据时,还会伴随
着后面数据的移动,添加或删除元素的速度较慢,效率较低。。
Arraylist集合中大部分方法都是从Collection集合中继承过来的,通过下面的例子来学
习一下如何使用ArrayList集合方法的各种操作。。
注意: get ()方法,返回的都是Object类型,所以要强转回相应的
类型
下午
一、迭代器
1Iterator迭代器
迭代器是一个对象,用来遍历并选择序列中的对象(元素),而用户不必知道或关心该
序列底层的结构。初学者可以简单地把迭代器想象为一个里面放置了若干个物件的容器,
些物件从第一个开始一 个接 -一个前后线性排列,人们只要从第- -个物件开始,就可以通过每次往后移动一个,从而把所有物件“遍历出来”。这里把迭代器比作容器,元素比作物件。
所有的集合类都实现了Iterator 接口,这是一个用于遍历集合中元素的接口,主要包
含以下三种方法:
1.lterator iterator():返回一个lterator迭代器对象,lterator 将准备好返回一个序列的第
一个元素。通俗地讲,集合调用了这个方法后就会将所有元素“封装”进上述的“容器”中,
所有元素就成为了容器中有序排列的一个个“物件”。。
2.boolean hasNext():是否还有下一个元素。。
3.0bject next():返回下一个元素。。
思考:为什么next方法返回类型是object ?
这是为了可以接受任意类型的对象,那么返回的时候,不知道是什么类型的就定义为
Objecto
注意:迭代器遍历通常使用while循环,也可用for循环。
对于迭代器的遍历,还要想象迭代器内部有个指针,初始时指向迭代器内的第一个元素
的前面一位(null), 如图9.3所示,第一次调用next()方法时,指针从第-一个对象的前面一
(null) 往后移向第一个对象(相当于移动了-),并返回第一个对象,如图9.4所示。
以后每调用一次next()方法,指针就会往后移-,并且返回往后移-位后指向的那个对象。。
二、.foreach循环。
Iterator 对集合进行遍历用起来还是比较繁琐,Java 后来提供了-个更加简洁的foreach
循环结构大大简化了遍历工作, foreach循环也称增强的for循环,可以用来处理集合中的每
个元素而不用考虑集合的素引。。
语法格式如下:
for(容器中元素类型 临时变量:容器变量){
//循环体。
}
从语法格式可以看出,foreach循环会自动遍历容器中的每个元素,完全不需要获得容
器的长度,也不需要根据索引访问容器中的元素。示例:
三、
.9.5 Set接口及其实现类
Set接口继承自Collection 接口,是一个用于存储和处理无重复元素的高效数据结构。
Set接口规定了存储的元素是不可重复的,无序的,无序是指集合元素的存储顺序与取出顺
序是不一定相同的,不可重复是指在一个set集合中,不能存在元素e1e2,使得
e1.equals(e2)的返回值为trueSet 接口的三个具体实现类是:散列类HashSet,链式散列类
LinkedHashset和树形集Treeset,本章重点介绍HashSetTreeset,其中Hashset通过元素
的哈希值来确定其存储位置,存取与查找方便,TreeSet 通过二叉树来存储元素,可以实现
对集合中的元素排序。。
四、HashSet集合
HashSet实现了Set接口,当一个元素存入HashSet时首先会调用Object类的hashCode()方法来确定存储位置,然后判断该位置有没元素存在,如果没有就直接存入,如果该位置已经有对象,则调用equals()方法判断是否相等,如果不相等就存入,覆盖原有的对象,否则舍弃该对象,这种机制保证了HashSet中不会出现重复元素。
Map接口及其实现类.
Map接口提供了通过键快速获取、删除和更新键/值对的功能。Map (映射表)将值和键
-起保存,如学校里通常将学生的学号做为键,学生的姓名作为值,学号和姓名- -起保存,
通过学生这个键就可以查找到学生的姓名这个值。键的作用类似索引,在List中,索引是整
;而在Map中,键可以是任意类型的对象,映射表中不能有重复的键,每个键都对应- -
个值。一个键和它的对应值构成一一个条目并保存在映射表中,如图9.8所示,展示了一-个映
射表,其中每个条目作为键的学号以及作为值的姓名所组成,通过学号(键)就可找到对应
的某个学生的姓名(值)。。
.9.6.1 HashMap集合.
HashMap集合是Map接口的- - 个实现类.它存储的每一- 个元素都是键慎对<Key,Value>.
键和值均可以是任意类型,键和值都允许为空,但最多只允许一条 记录的键为null, HashMap
集合的键不能重复,HashMap集合的元素是无序的。HashMap集合根据键的HashCode值存
储数据,具有很快的访问速度,不支持线程同步。。
对于键值对<Key,Value>, HashMap内部会将其封装成- - 个对应的Entry<Key,Value>对象,
Entry<Key,Value> 对象是键值对<Key,Value>的组织形式;对应图9.8中的一个条目。
Entry<Key,Value>对象的getKey(方法返回键,getValue()方返回值。 。
对于每个Entry<Key,Value>对象而言,JVM都会为其生成- - hashcode 值。HashMap
存储键值对Entry<Key,Value>的时候,会根据Keyhashcode值,以某种映射关系。决定应
当将这对键值对Entry<Key,Value> 存储在HashMap中的什么位置上;当通过Key值取数据的
时候,根据Key值的hashcode和内部映射条件,直接定位到Key对应的Value值存放在什
么位置,可以非常高效地将Value值取出。。
七、 HashSet泛型集合.
语法:
HashSet <T> set = new HashSet <T>();
或者。
Set <T> set = new HashSet <T>();
注意:泛型相当于有一个约束作用, 类型不同不能用。
LinkedList 集合。
LinkedList类采用链表结构保存对象,这种结构的优点是便于向集合中插入和删除对象.该集
合内部采用包含有两个Node (节点)类型的Firstlast属性维护了-一个双向循环链表,链
表中的每- -个元素都引用了它的前一-个元素和后-一个元素,相当于每个元素前后都有一一个指
针,分别指向前一个元素和后--个元素,集合中的所有的元素因此彼此相连。当需要在两个
元素中间插入-一个新元素时,只需简单地修改元素之间的指针即可,删除集合中的- -个元素
也类似的原理,如图9.5所示。不过这种链表结构对于随机访问集合中的元素效率较低。。
List<E> list = new ArrayList<E>();e
List<E> list2 = new LinkedList<E>0);e
在上面的代码中,E可以是合法的Java数据类型。例如,如果集合中的元素为字符串类
型,那么E可以修改为String,也可以是自定义类型,后面讲泛型集合时会详细讲解。。
LinkedList集合除了从接口CollectionList中继承并实现了集合操作的方法外,还定义
了一-些特有的方法,如表9.3所示。。
              

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
码云社-用代码改变世界!
回复 关闭延时

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

CODESEEDING(码云社)一家致力于程序员成长、以内容为核心、以提问为引导的多元化成长社区。我们在线上为技术爱好者提供了一个优质的交流氛围环境,在线下同样和众多高校联合开办了技术沙龙品牌。
020-85534346
关注我们
  • 访问移动H5版
  • 官方微信公众号

码云社 - CODESEEDING 2.0© 2018-2019 码云社. TOOBUG ( 粤ICP备16114193号-3 )