发表于: 2018-04-01 23:34:53
3 591
今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)
1. 目前在学习了Java基础知识 ,今天主要学习了如何对List集合元素的去重
<1>接口Collection<E> 作为集合的跟接口(接口通常用来形成规范),子接口有List和Set。
对集合的基础操作方法有:
int size()
- 获取元素个数
boolean isEmpty()
- 是否个数为 0
boolean contains(Object element)
- 是否包含指定元素
boolean add(E element)
- 添加元素,成功时返回 true
boolean remove(Object element)
- 删除元素,成功时返回 true
Iterator<E> iterator()
- 获取迭代器
<2>Lise接口 元素是有序的, 而且元素可以重复,可以为null的集合,该类集合中有索引。实现类有ArrayList,LinkedList和Vector(此方法和ArrayList一样,但是是线程安全的类,运行速度教慢) 索引:List接口的用户可以对列表中每个元素的插入位置进行精确地控制
List中出了继承Collection的一些方法,还提供如下操作
- 位置相关:
List
和 数组一样,都是从 0 开始,我们可以根据元素在 list 中的位置进行操作,比如说get
,set
,add
,addAll
,remove
; 例:set方法的使用 set(int index, E element)
用指定元素替换列表中指定位置的元素(可选操作)。- 搜索:从 list 中查找某个对象的位置,比如
indexOf:
indexOf(Object o)
返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。lastIndexOf:
lastIndexOf(Object o)
返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。- 迭代:使用 Iterator 迭代器 ListIterator 进行迭代操作;(例:List<E> li=new ArrayList<E>(); Iterator it=li.iterator() 然后可以用迭代器中的方法hasNext()和next()方法 ,通过while循环进行遍历)。
- 范围性操作:使用
subList
方法对 list 进行任意范围的操作。 subList(int fromIndex, int toIndex)
返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。
a.ArrayList 底层数据结构使用数组结构: 查询速度快。但是增删稍慢。
b.LinkedList 底层使用链表数据结构: 增删块, 但是查询慢。
特有方法:
1)、addFirst()从集合列表开头插入元素
2)、addLast()从集合列表结尾插入元素(等效于add())
3)、getFirst()拿到第一个元素,返回这个元素
4)、getLast()拿到最后一个元素,返回这个元素
5)、removeFirst()移除第一个元素,返回这个元素
6)、removeLast()移除最后一个元素,返回这个元素
(如果列表中没有元素,那么:3到6方法抛 空元素异常)
<3>Set接口 元素是无序(存入和取出的顺序不一定一致)的,而且元素不能重复(最多可存一个null),该类集合中没有索引,因为没有索引,遍历方法常用迭代器。常用实现类有HashSet,TreeSet和LinkedHashSet(继承HashSet)
HashSet:使用一个哈希表存储元素的,是非排序的,可以随机访问,是Set的最优性能实现.(在底层实现上依赖于HashMap→另一集合Map中的类)。
方法有:
add(E e)
: 如果此 set 中尚未包含指定元素,则添加指定元素。(如果集合中存在e对象,则add返回值为false)
clear():
从此 set 中移除所有元素。
contains(Object o):
如果此 set 包含指定元素,则返回 true。
isEmpty()
:如果此 set 不包含任何元素,则返回 true。
remove(Object o):
如果指定元素存在于此 set 中,则将其移除。
哈希表:链表数组结合体,线程不安全,查找快,增删块。
TreeSet:底层数据结构: 二叉树
重点!!!!:如何对List集合去重复
思路:1.Set集合不允许存在重复元素 2.ArrayList集合方法contains(Object o):
如果此列表中包含指定的元素,则返回 true。
3.Set重写Colletion接口方法addAll():如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中。 举例:1.
实现思路:对List集合遍历,将遍历元素存储到Set集合中,set集合会对重复元素进行覆盖,最后将Set集合遍历存储到List集合中,实现去重
举例:2.
实现思路:重新new一个List集合,遍历原List集合存储到新List集合,存储前先用contains
方法判断new List集合中是否存在此元素,从而实现去除重复
举例:3
实现思路:用addAll方法,将集合List中的元素放入Set集合,根据Set集合的特效去重复,在取回,实现去重
明天计划的事情:Java基础知识已学习将近1个月了,明天将学习MySQL的数据库概念,安装MySQL,MySQL图形化界面和MySQL基础使用方法
遇到的问题:对集合的各个方法运用不熟悉,对继承思想理解不透彻,巩固知识不够,今天做一个小练习题才发现问题,一开始想的是对List遍历然后比较,通过删除元素来实现去重,后了发现很麻烦,代码实现也很繁琐,然后百度了一下,通过看博客,然后查询API,才发现有些方法都没印象,对于类提供的方法都没,很简单的事情由于没有好好分析就想着动手去做
收获:通过今天的习题,重新回顾了Collection集合跟接口的知识点,以及实现类的特性和特有方法,通过写日报,加深了基础知识
评论