发表于: 2018-04-01 23:34:53

3 593


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了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 中的位置进行操作,比如说 getsetaddaddAllremove;
  •      例: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集合跟接口的知识点,以及实现类的特性和特有方法,通过写日报,加深了基础知识


返回列表 返回列表
评论

    分享到