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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁錦泰 黑马帝   /  2012-5-6 21:26  /  2520 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看到这段代码,突然想不起Map集合的取出方式,记得需要转换为Set集合,然后进行迭代
默认打印输出的是键,其他什么都想不起来了,有那位仁兄可以帮我解惑,谢谢...


import java.util.Properties;
import java.util.Set;

public class propertiesDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        propertiesDemo();
    }

    private static void propertiesDemo() {
        // TODO Auto-generated method stub
        Properties prop = new Properties();
        prop.setProperty("zhangsan", "25");
        prop.setProperty("lisi","27");
        prop.setProperty("wangwu","29");
        prop.setProperty("zhaoliu","31");
        Set<String> names = prop.stringPropertyNames();
        for(String name : names){
            String value = prop.getProperty(name);//为什么传入的是参数内传入的是name,写了这句话之后值会被打印
            System.out.println(name+","+value);
        }
    }

}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

10 个回复

倒序浏览
for(String name : names) 楼主看到这句话没  这里的name 就是names集合里面取出来的单个  而names集合是prop里面的键的集合  所以就能取到对应的值

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
Set<String> names = prop.stringPropertyNames(); //首先这段代码会把Properties集合里的键全部取出来并转成set集合。
for(String name : names) //循环遍历set集合里的值,这些值就是Properties集合里的键
String value = prop.getProperty(name); //通过遍历出来的键,取出Properties集合里对应键的值并赋给value变量
这样就打印了,键对应的值

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
程旦 发表于 2012-5-6 21:34
for(String name : names) 楼主看到这句话没  这里的name 就是names集合里面取出来的单个  而names集合是p ...

我白天大概看了看增强for循环,并不是很仔细,当时的理解就是那个name是个自定义的名字,我取任何名字都可以,然后就没有再深入去研究.刚刚看到这段代码中的那句话之后我唯一能与之联系上的就是这个增强for循环里面的name,按照你说的那个name在集合中代表的是值? 之前我没想明白他们之间的联系,其实现在我仍然没想明白,你能不能解释得再稍微详细一点,我现在就好像从来没学过一样,什么都想不起来了...
回复 使用道具 举报
谭景宾 发表于 2012-5-6 21:42
Set names = prop.stringPropertyNames(); //首先这段代码会把Properties集合里的键全部取出来并转成set集 ...

明白了,是通过键获取值,存储的时候是全部存储的,但取出时只取出值,想要获取值就要通过键来获取对应的值.. 谢谢你!
回复 使用道具 举报
本帖最后由 廖理 于 2012-5-6 22:08 编辑

Properties是HashTable的子类,HashTable的取出方式有两种:
第一种是过KeySet()方法先将所有键转成Set集合,在通过对set集合的迭代通过get(Object  key)方法取出键对应的值。
第二种方法是将键值对的映射关系转换成通过entrySet()方法存入一个Set集合,此映射是一个实现了 Map.Entry<K,V>接口的类的对象,然后通过此对上述Set集合对象的getKey() 和getValue()方法获相应的键和值

很明显Properties是可以通过上述两种方式获取键值对的

但是Properties中由定义了自己将键都存入Set集合的方法,即stringPropertyNames() ,并且也还有通过键获得相应值的方法getProperty(String key),所以此处与HashTable的第一种取得元素的方法是一样的 ,只不过把keySet()方法和get(Object  key)方法换成了stringPropertyNames()和getProperty(String key)
(注意:Properties是HashTable的子类,并且它没有定义泛型,Properties中的键和值都只能是String类型的值。)

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
廖理 发表于 2012-5-6 22:07
Properties是HashTable的子类,HashTable的取出方式有两种:
第一种是过KeySet()方法先将所有键转成Set集 ...

补充的很及时,现在更加清楚其中的细节了.谢谢你! 我总是会忽略子父类和接口的关系,所以代码总是会写错,这个是不是看得多了就能记住?
回复 使用道具 举报
很简单的问题,直接看Properties类的源代码:
public synchronized Object setProperty(String key, String value) {
        return put(key, value);    //此处调用Hashtable的public synchronized V put(K key, V value){……}
}   //相当于把key、value存入Hashtable

public Set<String> stringPropertyNames() {
        Hashtable<String, String> h = new Hashtable<>();
        enumerateStringProperties(h);
        return h.keySet();    //返回key值的集合
}

public String getProperty(String key) {
        Object oval = super.get(key);       //此处调用Hashtable的public synchronized V get(Object key) {……}
        String sval = (oval instanceof String) ? (String)oval : null;    //相当于从Hashtable中取值
        return ((sval == null) && (defaults != null)) ? defaults.getProperty(key) : sval;
}
就算下面的return语句看不懂,也能加深对Properties类的理解,这就是源代码的作用!
回复 使用道具 举报
隋营营 发表于 2012-5-6 22:36
很简单的问题,直接看Properties类的源代码:
public synchronized Object setProperty(String key, String ...

谢谢! 哥们儿能给个QQ号码不?
回复 使用道具 举报
袁錦泰 发表于 2012-5-6 22:57
谢谢! 哥们儿能给个QQ号码不?

1971634546
回复 使用道具 举报
袁錦泰 发表于 2012-5-6 22:16
补充的很及时,现在更加清楚其中的细节了.谢谢你! 我总是会忽略子父类和接口的关系,所以代码总是会写错,这 ...

多谢几个几个程序练练 就有感觉了,没事的时候 多复习复习啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马