迭代器:Iterator接口

//获取集合中的对象
Iterator<E> iterator()

interface Iterator
{
  boolean hasNext();
  Object next();
}
//遍历

Iterator ite = col.iterator();
while(ite.hasNext())
{
  //获得一个对象
  Object obj = ite.next();
  System.out.println(obj);
}
for(int i = 0;i<col.size();i++)
{ } for(Iterator ite = col.iterator();ites.hasNext());)
{ }

集合:Collection接口

  可以存储不同类型的对象,而且随着存储的对象的增加容量自动扩大

  Collection:
    **iterator():获取集合中的对象
    --List:
      存储的对象是有序的
      集合中对象的顺序和添加对象的顺序是一致的,可以重复的
      List特有的方法都是可以操作下标的方法
      --ArrayList:
        底层使用的数据结构是数组
        线程不安全的
        查找速度快,增删速度慢
      --LinkedList:
        底层使用的数据结构是链表
        线程不安全的
        查找速度慢,增删速度快
      --Vector:
        底层使用的数据结构是数组
        线程安全的(被ArrayList替代)
        查找速度快,增删速度慢,被ArrayList替代
   --Set:
    存储的对象是无序的,不可重复的
    --HashSet:
      底层使用的数据结构是哈希表
      线程不安全
    --TreeSet:
      底层使用的数据结构是二叉树,可以排序
      线程不安全

  Vector: 动态数组

    早期使用Enumeration接口进行枚举

Enumeration e = v.elements();

while(e.hasMoreElements())
{
Object obj = e.nextElements();
System.out.println(obj);
}

LinkedList:

jdk1.5 jdk1.6之后

addFirst

addLast

offerFirst

offerLast

getFirst:获取的元素不存在出现NoSuchElementException

getLast

peekFirst:获取的元素不存在返回null

peekLast

removeFirst

removeLast

linkFirst

linkLast

  ArrayList:

1 去掉集合中重复的对象

  新建一个list2
  遍历旧集合
    如果list2中不包含这个对象,添加
      contains(obj)
    如果list2中包含,不添加

 2 contains判断是否包含某个对象的依据?

   依据boolean equals(Object obj)方法的返回值

 

 3 直接输出List<Class>的话,输出的是Class的hash值

  解决:
    在class中重写toString():

  
    public String toString()
    {
      return ...;
    }

 

 4 去掉List<class>中相同内容的class

  在class中重写equals()

  public boolean equals(Object obj)

  {

    if(!(obj instanceof Student))//如果obj不是Student类型
       throws new RuntimeException("类型错误");

    Student stu = (Student)obj;

    return this.age == stu.age && this.name.equals(stu.name);
  
   }

 

  HashSet:

1 在使用add方法添加对象时就保证了对象的唯一

 2 HashSet无序的原因

  数据结构是哈希表,根据哈希算法得到位置,导致的无序

3 HashSet保证对象唯一的方式
 在添加对象时,先比较得到对象的hash值和集合中对象的hash值分别进行比较

 int hashCode()
  如果和所有对象的hash值都不相同,将对象直接添加到集合
 
 boolean equals()

  如果相同,使用equals()方法比较内存地址是否相同

     如果相同,认为是同一对象,不添加

     如果不同,认为是不同的对象,加入集合

 4 去掉Hash<class>中相同内容的class

  在class中重写hashCode 和 equals方法

  public int hashCode()
  {
    return name.hashCode() + age * 33;
  }

  public boolean equals(Object obj)
  {
    if(!(obj instanceof Student))//如果obj不是Student类型
      throws new RuntimeException("类型错误");

    Student stu = (Student)obj;

    return this.age = stu.age && this.name.equals(stu.name);
  }

   TreeSet:

1 在使用add方法添加对象时会对添加的对象进行排序
  排序方式一:
    集合中对象所属的类实现了Comparable接口中的compareTo()方法
  排序方式二:
    自定义排序方法 2 TreeSet保证对象唯一的方式:
  集合中对象所属的类实现了Comparable接口中的compareTo()方法

 3 去掉TreeSet<class>中相同内容的class

   在class中重写compareTo()

    public int compareTo(Object obj)
    {

      if(!(obj instanceof Student))//如果obj不是Student类型
        throws new RuntimeException("类型错误");

      Student stu = (Student)obj;

      int num = this.age - stu.age;

      return num == 0 ? this.name.compatrTo(stu.name) : num;
    }

Java 迭代器 工具类的更多相关文章

  1. Java Properties工具类详解

    1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...

  2. Java json工具类,jackson工具类,ObjectMapper工具类

    Java json工具类,jackson工具类,ObjectMapper工具类 >>>>>>>>>>>>>>> ...

  3. Java日期工具类,Java时间工具类,Java时间格式化

    Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...

  4. Java并发工具类 - CountDownLatch

    Java并发工具类 - CountDownLatch 1.简介 CountDownLatch是Java1.5之后引入的Java并发工具类,放在java.util.concurrent包下面 http: ...

  5. MinerUtil.java 爬虫工具类

    MinerUtil.java 爬虫工具类 package com.iteye.injavawetrust.miner; import java.io.File; import java.io.File ...

  6. MinerDB.java 数据库工具类

    MinerDB.java 数据库工具类 package com.iteye.injavawetrust.miner; import java.sql.Connection; import java.s ...

  7. 小记Java时间工具类

    小记Java时间工具类 废话不多说,这里主要记录以下几个工具 两个时间只差(Data) 获取时间的格式 格式化时间 返回String 两个时间只差(String) 获取两个时间之间的日期.月份.年份 ...

  8. Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie

    Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie >>>>>>>>>>>>& ...

  9. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

随机推荐

  1. OSI七层网络模型与TCP/IP四层模型介绍

    目录 OSI七层网络模型与TCP/IP四层模型介绍 1.OSI七层网络模型介绍 2.TCP/IP四层网络模型介绍 3.各层对应的协议 4.OSI七层和TCP/IP四层的区别 5.交换机工作在OSI的哪 ...

  2. View的事件拦截机制浅析

    为什么要去分析view的事件 记得上周刚立的flag就是关于view的事件机制.那现在我来说说我对view的感受.关于view的事件,百度google一搜.一批又一批.但是能让人理解的少之又少.换句话 ...

  3. Linux下C++的通用Makefile与解析

    本文给出万能Makefile的具体实现,以及对其中的关键点进行解析.所谓C++万能Makefile,即可编译链接所有的C++程序,而只需作很少的修改. 号称万能Makefile,一统江湖.我对原版的M ...

  4. 当前目录如何打开cmd

    前言 有时候需要在当前文件夹打开cmd控制台,直接从开始打开cmd进入当前目录比较麻烦,可以直接进入. 方法 按住键盘上Shift键的同时,在要操作的文件夹(DOS年代称为目录)上点击鼠标右键,在弹出 ...

  5. liunx服务程序的安装及配置

    1.系统运行级别:

  6. liunx网络基本命令

    1.ifconfig 查看本机的ip或者网关 更改本机的ip地址 2.sudo reboot    重启 跟 sudo shutdown -r new  是一样的意思

  7. Vue2.x directive自定义指令

    directive自定义指令 除了默认设置的核心指令( v-model 和 v-show ),Vue 也允许注册自定义指令. 注意,在 Vue2.0 里面,代码复用的主要形式和抽象是组件——然而,有的 ...

  8. 【转】每天一个linux命令(34):du 命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/12/10/2810755.html Linux du命令也是查看使用空间的,但是与df命令不同的是Lin ...

  9. 什么是Map-Reduce

    Map-Reduce本身并不是算法:而是一种处理模式:因为在大数据分布式这种场景下,处理数据运算和单机版不同:需要协同多台机器,并行计算:于是有了map-reduce这种模式,map阶段是数据处理,在 ...

  10. golang中如何判断文件是否有可执行权限

    本文介绍在Go语言如何检查文件的权限.以检查文件可执行权限为例. 在文件系统中,文件的属性使用uint32表示. 例如 -rwxrwxrwx 判断可执行权限,也就是检查文件mode是否有: --x-- ...