黑马程序员技术交流社区
标题:
关于集合的问题!!!
[打印本页]
作者:
锦宁
时间:
2014-6-27 21:57
标题:
关于集合的问题!!!
求大神总结!集合中各个类的遍历方式(有代码最好),学习时对这有点混淆!
作者:
yangjijin
时间:
2014-6-27 22:31
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;
}
}
作者:
燿陚√揚葳
时间:
2014-6-27 22:35
1.List集合的遍历方式:
<P>public class CollectionDemo {
//集合元素的获得
public static void method_get(){
ArrayList al=new ArrayList();
al.add("java001");
al.add("java002");
al.add("java003");
al.add("java004");
/*第一种方式,这样写比第二种便于观看
Iterator it=al.iterator();//获取迭代器,用于取出集合中的元素
while(it.hasNext()){
sop(it.next());
}
*/
//第二种方式,这样更节省内存空间
for(Iterator it=al.iterator();it.hasNext();){
sop(it.next());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
method_get();
}
}</P>
<P>
</P>
<P> </P>
复制代码
如果想要其他的操作如添加,修改等就需要使用其子接口,ListIterator 该集合只能通过List集合的ListIterator方法获取
public class MapTest {
public static void main(String[] args) {
/*
* 如果想要其他的操作如添加,修改等就需要使用其子接口,ListIterator
* 该集合只能通过List集合的ListIterator方法获取
*
*/
//演示列表迭代器
ArrayList al=new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
ListIterator lt=al.listIterator();
while(lt.hasNext()){
Object obj=lt.next();
if(obj.equals("java04"))
// lt.add("java05");
lt.set("java");
}
sop(al);
sop("hasPrevious:"+lt.hasPrevious());//true
sop("hasNext:"+lt.hasNext());//false
}
public static void sop(Object obj){
System.out.println(obj);
}
}
复制代码
枚举的
public class VectorDemo {
public static void main(String[] args) {
Vector al=new Vector();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
Enumeration e=al.elements();
while(e.hasMoreElements()){
sop(e.nextElement());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
复制代码
2.Set集合的遍历
TreeSet和HashSet遍历一样
public static void main(String[] args) {
HashSet hs=new HashSet();
//元素唯一,有重复的元素不会添加进去
sop(hs.add("java01"));//返回true
sop(hs.add("java01"));//false,由此可见在添加时
hs.add("java02");
hs.add("java03");
hs.add("java04");
hs.add("java03");
hs.add("java04");
//Set 接口取出的方式只有一种,迭代器
Iterator it=hs.iterator();
while(it.hasNext()){
sop(it.next());
}
}
复制代码
3.Map集合的遍历方式
第一种:Set<k>keySet:将Map中所有的键存入到Set集合,因为Set具备迭代器
所以可以用迭代方式取出所有的键,再根据get方法,获取每一个键对应的值
Map集合的取出原理,将Map集合转成Set集合,再通过迭代器取出
public class Coo {
public static void main(String[] args){
Map<String,String> m=new HashMap<String,String>();
m.put("01","java01");
m.put("02", "java02");
m.put("03","java03");
//先获取Map集合的所有键的Set集合,keySet()
Set<String> st=m.keySet();
//有了Set集合就可以获取其迭代器
Iterator<String> it=st.iterator();
while(it.hasNext()){
String key=it.next();
//有了键可以通过Map集合的get方法获取其对应的值
String value=m.get(key);
sop("key:"+key+"***value:"+value);
}
}
public static void sop(Object obj){
System.out.println(obj);
}
复制代码
第二种:Set<Map.Entry<k,v>>entrySet:将Map集合中的映射关系存入到了Set集合中。 而这个关系的数据类型就是:Map.Entry
public static void main(String[] args){
Map<String,String> m=new HashMap<String,String>();
m.put("01","java01");
m.put("02", "java02");
m.put("03","java03");
//将Map集合中的映射关系取出,存入到Set集合中
//Map.Entry是一个关系对象
Set<Map.Entry<String, String>> entrySet=m.entrySet();
Iterator <Map.Entry<String, String>> it=entrySet.iterator();//Set泛型是什么这里就是什么
while(it.hasNext()){
Map.Entry<String, String> me=it.next();
String key=me.getKey();
String value=me.getValue();
sop("key:"+key+"***value:"+value);
}
}
public static void sop(Object obj){
System.out.println(obj);
}
复制代码
第三种:高级for循环
for(数据类型 变量名:被变量的集合(Collection)或者数组){
Map集合遍历时三种方法,都是要将Map先转换成Set集合
public static void main(String[] args) {
HashMap<Integer,String> hm=new HashMap<Integer,String>();
hm.put(1,"a");
hm.put(2,"b");
hm.put(3,"c");
// for(Map.Entry<Integer,String> me:hm.entrySet()){
// System.out.println(me.getKey()+"**********"+me.getValue());
// }
Set<Integer> keySet=hm.keySet();
for(Integer in:keySet){
System.out.println(in+"***"+hm.get(in));
}
}
复制代码
}
作者:
锦宁
时间:
2014-6-28 00:27
燿陚√揚葳 发表于 2014-6-27 22:35
1.List集合的遍历方式:
如果想要其他的操作如添加,修改等就需要使用其子接口,ListIterator 该集合只能通 ...
感谢您的回答!!回答非常给力!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2