与Set Collection of java相关的查询

时间:2013-10-24 06:58:39

标签: java java-ee collections

在我的项目程序搜索栏中,我使用Set for store从数据库中检索值 我的代码是

Set<String> name=new HashSet<String>();
Set<String> category=new HashSet<String>();
Set<String> description=new HashSet<String>();

&安培;搜索查询是:

stmt=con.createStatement();
String sql="select name,category,left(description,150) from packages where name like      '%"+query+"%'";
rs=stmt.executeQuery(sql);
while(rs.next())
{
i++;
name.add(rs.getString(1));
category.add(rs.getString(2));
description.add(rs.getString(3));
System.out.println("Length Is :\n Name :"+name.size()+"\n category :"+category.size()+"\n description :"+description.size());
}

控制台上显示的结果是: 名称大小:42 类别大小:12 描述尺寸:12

但我认为所有设置对象的长度应该相同...在我的数据库中没有空值 是否有Set集合大小标准???或有任何其他问题???

4 个答案:

答案 0 :(得分:3)

Set不允许重复值。使用List代替Set

List<String> name=new ArrayList<>();
List<String> category=new ArrayList<>();
List<String> description=new ArrayList<>();

答案 1 :(得分:3)

Set不允许重复。

  

不包含重复元素的集合。更正式的,集合   不包含元素e1和e2对,使得e1.equals(e2)和at   大多数一个null元素。

String sql="select name,category,left(description,150)

我认为几个包具有相同的类别和描述(如果它是类别的描述)

如果您的表格如下:

name    |   category  |   description

Name1       cat1          descriptionOfCat1
Name2       cat1          descriptionOfCat1
Name3       cat2          descriptionOfCat2
Name4       cat2          descriptionOfCat2

你将拥有:

name size:4 
category size:2 
description size:2

答案 2 :(得分:2)

Set是一个不带重复值的接口。因此,您必须拥有42个不同的名称,12个不同的类别和12个不同的描述,这就是您获得大小变化的原因。 您可以使用List接口而不是set,可以使用ArrayList。

答案 3 :(得分:2)

Set不允许重复元素。请考虑List而不是Set

考虑这个设计。

你的物品

class Item {
    String name;
    String category;
    String description;
    public Item(String aName, String aCategory, String aDescription) {
        super();
        this.name = aName;
        this.category = aCategory;
        this.description = aDescription;
    }
    @Override
    public String toString() {
        return "Item [name=" + name + ", category=" + category
                + ", description=" + description + "]";
    }
}

您的数据访问代码。

List<Item> items=new ArrayList<Item>();
while(rs.next())
{
   i++;
   String name = name.add(rs.getString(1));
   String category = category.add(rs.getString(2));
   String  description = description.add(rs.getString(3)); 
   Item item= new Item(name,category,description);
   items.add(item);
   System.out.println(i+" item " item);
}

System.out.println("Total items "+items.size());