A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 锦宁 中级黑马   /  2014-6-27 21:57  /  1361 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

求大神总结!集合中各个类的遍历方式(有代码最好),学习时对这有点混淆!

3 个回复

倒序浏览
package com.itheima;

import java.util.Iterator;
import java.util.TreeSet;

public class Test10 {

        /**10、声明类Student,包含3个成员变量:name、age、score,
         * 创建5个对象装入TreeSet,按照成绩排序输出结果(考虑成绩相同的问题)。
         * @param args
         */
        public static void main(String[] args) {
                TreeSet<Student> t = new TreeSet<Student>();
                t.add(new Student("zhangsan",18,81));
                t.add(new Student("lisi",19,85));
                t.add(new Student("wangwu",20,84));
                t.add(new Student("zhanliu",21,83));
                t.add(new Student("gggg",19,82));
                Iterator<Student> it = t.iterator();
                while(it.hasNext()){
                        Student s = (Student)it.next();
                        System.out.println(s.getName()+","+s.getAge()+","+s.getScore());
                }
        }

}
//要有Comparable比较接口    才能去确定是声明方式排序的
class Student implements Comparable<Object>{
        private String name;
        public Student(String name, int age, int score) {
                this.name = name;
                this.age = age;
                this.score = score;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }
        public int getScore() {
                return score;
        }
        public void setScore(int score) {
                this.score = score;
        }
        private int age;
        private int score;
        @Override
        //比较 返回年龄相同就按照姓名排序
        public int compareTo(Object o) {
                Student s  = (Student)o;
               
                int  temp = this.age-s.age;
                return temp==0?this.name.compareTo(s.name):temp;
       
        }
}
回复 使用道具 举报
1.List集合的遍历方式:

  1. <P>public class CollectionDemo {
  2. //集合元素的获得
  3. public static void method_get(){
  4. ArrayList al=new ArrayList();
  5. al.add("java001");
  6. al.add("java002");
  7. al.add("java003");
  8. al.add("java004");
  9. /*第一种方式,这样写比第二种便于观看
  10. Iterator it=al.iterator();//获取迭代器,用于取出集合中的元素

  11. while(it.hasNext()){
  12. sop(it.next());
  13. }
  14. */
  15. //第二种方式,这样更节省内存空间
  16. for(Iterator it=al.iterator();it.hasNext();){
  17. sop(it.next());
  18. }
  19. }

  20. public static void sop(Object obj){
  21. System.out.println(obj);
  22. }
  23. public static void main(String[] args) {

  24. method_get();

  25. }

  26. }</P>
  27. <P>
  28. </P>
  29. <P> </P>
复制代码
如果想要其他的操作如添加,修改等就需要使用其子接口,ListIterator 该集合只能通过List集合的ListIterator方法获取
  1. public class MapTest {

  2. public static void main(String[] args) {
  3. /*
  4. * 如果想要其他的操作如添加,修改等就需要使用其子接口,ListIterator
  5. * 该集合只能通过List集合的ListIterator方法获取
  6. *
  7. */
  8. //演示列表迭代器
  9. ArrayList al=new ArrayList();
  10. al.add("java01");
  11. al.add("java02");
  12. al.add("java03");
  13. al.add("java04");
  14. ListIterator lt=al.listIterator();
  15. while(lt.hasNext()){
  16. Object obj=lt.next();
  17. if(obj.equals("java04"))
  18. // lt.add("java05");
  19. lt.set("java");
  20. }
  21. sop(al);
  22. sop("hasPrevious:"+lt.hasPrevious());//true
  23. sop("hasNext:"+lt.hasNext());//false



  24. }
  25. public static void sop(Object obj){
  26. System.out.println(obj);
  27. }

  28. }
复制代码
枚举的
  1. public class VectorDemo {

  2. public static void main(String[] args) {
  3. Vector al=new Vector();
  4. al.add("java01");
  5. al.add("java02");
  6. al.add("java03");
  7. al.add("java04");
  8. Enumeration e=al.elements();
  9. while(e.hasMoreElements()){
  10. sop(e.nextElement());
  11. }



  12. }
  13. public static void sop(Object obj){
  14. System.out.println(obj);
  15. }



  16. }
复制代码
2.Set集合的遍历
TreeSet和HashSet遍历一样
  1. public static void main(String[] args) {
  2. HashSet hs=new HashSet();
  3. //元素唯一,有重复的元素不会添加进去
  4. sop(hs.add("java01"));//返回true
  5. sop(hs.add("java01"));//false,由此可见在添加时
  6. hs.add("java02");
  7. hs.add("java03");
  8. hs.add("java04");
  9. hs.add("java03");
  10. hs.add("java04");

  11. //Set 接口取出的方式只有一种,迭代器
  12. Iterator it=hs.iterator();
  13. while(it.hasNext()){
  14. sop(it.next());
  15. }

  16. }
复制代码
3.Map集合的遍历方式
第一种:Set<k>keySet:将Map中所有的键存入到Set集合,因为Set具备迭代器
所以可以用迭代方式取出所有的键,再根据get方法,获取每一个键对应的值
Map集合的取出原理,将Map集合转成Set集合,再通过迭代器取出
  1. public class Coo {
  2. public static void main(String[] args){
  3. Map<String,String> m=new HashMap<String,String>();
  4. m.put("01","java01");
  5. m.put("02", "java02");
  6. m.put("03","java03");
  7. //先获取Map集合的所有键的Set集合,keySet()
  8. Set<String> st=m.keySet();
  9. //有了Set集合就可以获取其迭代器
  10. Iterator<String> it=st.iterator();
  11. while(it.hasNext()){
  12. String key=it.next();
  13. //有了键可以通过Map集合的get方法获取其对应的值
  14. String value=m.get(key);
  15. sop("key:"+key+"***value:"+value);
  16. }
  17. }
  18. public static void sop(Object obj){
  19. System.out.println(obj);
  20. }
复制代码


第二种:Set<Map.Entry<k,v>>entrySet:将Map集合中的映射关系存入到了Set集合中。 而这个关系的数据类型就是:Map.Entry
  1. public static void main(String[] args){
  2. Map<String,String> m=new HashMap<String,String>();
  3. m.put("01","java01");
  4. m.put("02", "java02");
  5. m.put("03","java03");
  6. //将Map集合中的映射关系取出,存入到Set集合中
  7. //Map.Entry是一个关系对象
  8. Set<Map.Entry<String, String>> entrySet=m.entrySet();
  9. Iterator <Map.Entry<String, String>> it=entrySet.iterator();//Set泛型是什么这里就是什么
  10. while(it.hasNext()){
  11. Map.Entry<String, String> me=it.next();
  12. String key=me.getKey();
  13. String value=me.getValue();
  14. sop("key:"+key+"***value:"+value);
  15. }
  16. }
  17. public static void sop(Object obj){
  18. System.out.println(obj);
  19. }
复制代码
第三种:高级for循环
for(数据类型 变量名:被变量的集合(Collection)或者数组){
Map集合遍历时三种方法,都是要将Map先转换成Set集合
  1. public static void main(String[] args) {

  2. HashMap<Integer,String> hm=new HashMap<Integer,String>();
  3. hm.put(1,"a");
  4. hm.put(2,"b");
  5. hm.put(3,"c");
  6. // for(Map.Entry<Integer,String> me:hm.entrySet()){
  7. // System.out.println(me.getKey()+"**********"+me.getValue());
  8. // }

  9. Set<Integer> keySet=hm.keySet();
  10. for(Integer in:keySet){
  11. System.out.println(in+"***"+hm.get(in));
  12. }


  13. }
复制代码

}







评分

参与人数 1技术分 +2 收起 理由
李小然 + 2 赞一个!

查看全部评分

回复 使用道具 举报 1 0
燿陚√揚葳 发表于 2014-6-27 22:35
1.List集合的遍历方式:
如果想要其他的操作如添加,修改等就需要使用其子接口,ListIterator 该集合只能通 ...

感谢您的回答!!回答非常给力!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马