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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hh198712 初级黑马   /  2013-3-3 22:32  /  1693 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 猫腻 于 2013-3-13 10:27 编辑

set 是不能够重复的集合元素 ,而Map 是 k,v 形式键值对存储
详解一下三个类 的区别?谢谢

9 个回复

倒序浏览
最精简的说就是:Set表示不允许容纳重复元素的集合,List表示可以容纳重复元素的集合,Map表示存储键/值对的集合,每个键/值对称为一项。
回复 使用道具 举报
本帖最后由 唐长智 于 2013-3-4 23:09 编辑

(Map集合以键值对的形式储存对象,键中不允许有重复元素,需要保证键的唯一性,值是允许有重复的元素。)抱歉说反了:
应该是键中允许有重复元素,值里不允许有重复元素。
map集合的子类有HashMap,TreeMap,HashTable
Set集合中不能有重复元素。
Set的子类有HashSet,TreeSet
比较特殊的有HashSet的底层是由HashMap来实现的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
唐长智 发表于 2013-3-3 23:11
Map集合以键值对的形式储存对象,键中不允许有重复元素,需要保证键的唯一性,值是允许有重复的元素。
map ...

建议你再看看Map集合,键值对哪个能重复,哪个不能
回复 使用道具 举报
黄玉昆 发表于 2013-3-4 23:05
建议你再看看Map集合,键值对哪个能重复,哪个不能

哈哈,版主眼尖,我误导同学了,现在去改。
回复 使用道具 举报
本帖最后由 谢洋 于 2013-3-5 01:07 编辑

1、Set中元元素是唯一的;Map<k,v>存放的是键值对,其中的键是唯一的,值是可以重复的
2、他们确保元素的唯一都是以他们所存入元素(对象)的hashCode方法和equals 方法的返回结果断定元素是否已经存在.
3、元素(对象)的这两个方法是从Object中继承过的,通常我们会根据不同的类的属性去复写这两方法。
4,当对象的变量参与了上面两方法的运算,那么当我们改变对象变量的值时,这两个方法返回值也回相应的改变,这点毕老师说得好清楚;
如果在上面第三点条件下,我们把对对象的变量值改变后(hashcode和equals返回值也改变),再存回,他们都认为是一个新的元素。
其实他们很相似
另外补充一点,集合只能存入引用类型的数据,但jdk1.5后的自动装拆箱功能,可以把基本类型装箱(不是转型)成对应的引用类型存入;之所以在装箱才能存入,是因为基本类型的引用类型有equals和hashcode方法。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
在Java中使用Set,可以方便地将需要的类型以集合类型保存在一个变量中.主要应用在显示列表.Set是一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。

以下是在JAVA中使用Set的范例,希望对大家有帮助.

import java.util.*;
public class test {

/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
   Set  set=new HashSet();
   set.add("abc");
   set.add("cde");
   set.add("efg");
   set.add("fgh");   
   set.add("abc"); //重复的abc,set会自动将其去掉   
   System.out.println("size="+ set.size() );
    List list = new ArrayList();
    list.add("abc");
    list.add("aaa");
    list.add("fff");
    set.addAll(list); //将list中的值加入set,并去掉重复的abc
         System.out.println("size="+ set.size() );
        for( Iterator   it = set.iterator();  it.hasNext(); )
        {            
            System.out.println("value="+it.next().toString());            
        }
}   

}

回复 使用道具 举报
在Java中使用Set,可以方便地将需要的类型以集合类型保存在一个变量中.主要应用在显示列表.Set是一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。

以下是在JAVA中使用Set的范例,希望对大家有帮助.

import java.util.*;
public class test {

/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
   Set  set=new HashSet();
   set.add("abc");
   set.add("cde");
   set.add("efg");
   set.add("fgh");   
   set.add("abc"); //重复的abc,set会自动将其去掉   
   System.out.println("size="+ set.size() );
    List list = new ArrayList();
    list.add("abc");
    list.add("aaa");
    list.add("fff");
    set.addAll(list); //将list中的值加入set,并去掉重复的abc
         System.out.println("size="+ set.size() );
        for( Iterator   it = set.iterator();  it.hasNext(); )
        {            
            System.out.println("value="+it.next().toString());            
        }
}   

}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
猫腻 高级黑马 2013-3-13 10:15:58
9#
楼主,为刷分而提问,撤销技术分。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马