java基础知识5--集合类(Set,List,Map)和迭代器Iterator的使用

写的非常棒的一篇总结: http://blog.csdn.net/speedme/article/details/22398395#t1

下面主要看各个集合如何使用迭代器Iterator获取元素:

1.list使用迭代器Iterator

public class testArrayList {
    public static void main(String args[]) {
        f1();
        f2();
    }
    public static void f1(){
        List<String> strList = new ArrayList<String>();
        for (int i = 0; i < 10; i++)
        {
            strList.add("string" + i);
        }

        Iterator<String> iterator = strList.iterator();//list.iterator()
        while (iterator.hasNext())  //判断集合中元素是否遍历完毕,如果没有,就返回true
        {
            if (iterator.next().equals("string3"))
            {
                iterator.remove();  //iterator.remove()移除的是最近一次iterator.next()所获取的对象
            }
        }
        iterator = strList.iterator();//此步非常重要,删除后要重新定义迭代器
        while (iterator.hasNext())
        {
            System.out.println(iterator.next()); //iterator.next() 返回下一个元素
        }
    }

        public static void f2() {
// 1.向arraylist中添加元素

            ArrayList arrayList = new ArrayList();
            arrayList.add("wyy");  //arrayList.add
            arrayList.add("12");
            arrayList.add("huhu");
            arrayList.add("897");

            System.out.println("输出整个arraylist" + arrayList);  //[wyy, 12, huhu, 897]

            for (int i = 0; i < arrayList.size(); i++) {
                System.out.println(arrayList.get(i));
            }

            Iterator<String> a = arrayList.iterator();
            System.out.println("剩下的元素有:");
            while (a.hasNext()) {
                if (a.next().equals("12")) {
                    a.remove();
                }
            }
//用for循环,可以节约内存,开发时一般使用
            for( a = arrayList.iterator();a.hasNext();)//注意,如果判断结果后删除,必须重新对迭代器进行定义,才能取出剩余的数据
            {
                System.out.println(a.next());
            }
        }

}

2.set使用迭代器Iterator

package collection;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

/**
 * Created by wyy on 2017/2/20.
 */
public class SetTest {
    public static void main(String[] args) {

//set常用的方法:
        Set set = new HashSet();
        set.add("wq");
        set.add("er");
        set.add("er");
        set.add("gee");
        set.add("wdd");
        set.add("3242");
        System.out.println(set);
        Set sortedSet = new TreeSet(set); //添加的元素必须是有效,即可比较排序的,用compareTo
     /* sortedSet.add(new SetTest());
        报错:collection.SetTest cannot be cast to java.lang.Comparable  add的元素必须是可以比较的*/
        System.out.println(sortedSet); //[3242, er, gee, wdd, wq],列表的第二次输出已按字母顺序排序。
        String a="a";
        String b="a";
        System.out.println(a.hashCode());//65
        System.out.println(b.hashCode());//97

        Iterator iterator=set.iterator();//创建一个集合的迭代器,用来取元素
        while (iterator.hasNext()){
              Object obj = iterator.next();
            System.out.println(obj);

        }

    }
}

3.map使用迭代器,共有4种方法

package collection;

import java.util.*;

/**
 * Created by wyy on 2017/2/21.
 */
public class MapTest {
    public static void main(String[] args) {
        Map<Integer,String> map=new HashMap<>();
        map.put(1,"wo");
        map.put(2,"chi");
        map.put(3,"xi");
        map.put(4,"gua");
        System.out.println(map.size());
/*方法1:使用set存储key的值,然后用for循环获取value的值*/
        Set<Integer> set=map.keySet();//获取所有key的值
        for (int i:set
             ) {
            String value=map.get(i);  //获取value的值
            System.out.println(value);

        }

/*方法2:使用Map.entrySet<>构造iterator遍历key和value*/
        Iterator<Map.Entry<Integer,String>> it=map.entrySet().iterator();
        while (it.hasNext()){
            Map.Entry<Integer,String> entry=it.next();
            System.out.println("the key is:"+entry.getKey()+",and the value is:"+entry.getValue());

        }

/*方法3:推荐,通过Map.entrySet遍历key和value,特别是大容量时 */
        for (Map.Entry<Integer,String> en:map.entrySet()){
            System.out.println("the key is:"+en.getKey()+",and the value is:"+en.getValue());
        }

/* 方法4:只能得到value的值       */
        for (String v1:map.values()
             ) {
            System.out.println("the value is:"+v1);
        }

    }
}
时间: 2024-08-04 00:29:50

java基础知识5--集合类(Set,List,Map)和迭代器Iterator的使用的相关文章

java基础知识回顾之java集合类-Properties集合

/** java.lang.Object   |--java.util.Dictionary<K,V>      |--java.util.Hashtable<Object,Object>          |--java.util.Properties * @author Administrator *Properties集合:         * 特点:         * 1,该集合中的键和值都是字符串类型.         * 2,集合中的数据可以保存到流中,或者从流加载 

Java基础知识(二)

1,字符串 new String("abc")创建了几个对象? 一个或两个,如果常量池中原来有"abc",则只创建一个对象:如果常量池中原来没有字符串"abc",那么就会创建两个对象. String s="abc"; String s1="ab"+"c"; System.out.println(s==s1); 输出 true ,因为"ab"+"c"

沉淀,再出发:Java基础知识汇总

沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的语法,对象的定义,类.接口.继承.静态.动态.重载.覆盖这些基本的概念和使用方法,到稍微高级一点的多线程,文件读写,网络编程,GUI使用,再到之后的反射机制.序列化.与数据库的结合等高级一点的用法,最后将设计模式应用其中,产生了一个个新的概念,比如Spring.Spring MVC.Hibernat

毕向东—Java基础知识总结(超级经典)

Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思路体现出来. 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用.demo 4,该技术什么时候用?test. ------------------------------------------------------ 一:java概述: 19

Java基础知识总结(超级经典)

Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思路体现出来. 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用.demo 4,该技术什么时候用?test. —————————————————————————————————————————————————————— 一:java概述: 19

Java基础知识的三十个经典问答

Java基础知识的三十个经典问答 1.面向对象的特点 抽象: 抽象是或略一个主题中与当前目标的无关的因素,一边充分考虑有关的内容.抽象并不能解决目标中所有的问题,只能选择其中的一部分,忽略其他的部分.抽象包含两个方面:一是过程抽象:一是数据抽象. 继承 继承是一种联接类的层次模型,允许和鼓励类的重用,提供了一种明确的共性的方法.对象的一个新类可以从现有的类中派生,这叫做类的继承.心累继承了原始类 的特性,新类称为原始类的派生类或者是子类,原始类称为新类的基类或者父类.子类可以从父类那里继承父类的

JAVA基础知识|lambda与stream

lambda与stream是java8中比较重要两个新特性,lambda表达式采用一种简洁的语法定义代码块,允许我们将行为传递到函数中.之前我们想将行为传递到函数中,仅有的选择是使用匿名内部类,现在我们可以使用lambda表达式替代匿名内部类.在学习lambda表达式之前,建议各位看官先去学习一下匿名内部类(JAVA基础知识|内部类). stream提供了很多有用的api,方便了我们对集合的操作 一.lambda表达式 基本语法:(parameters) -> expression或(param

Java基础知识回顾之七 ----- 总结篇

前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数据类型 基本数据类型主要有: byte.short.int.long.float.double.char.boolean 它们可以分为三类: 数值类型:byte.short.int.long.float.double 字符类型:char 布尔型:boolean 其中byte是8位,short是16位

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方