0

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

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

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

4

4 回答 4

3

Set不允许重复值。使用List而不是Set.

List<String> name=new ArrayList<>();
List<String> category=new ArrayList<>();
List<String> description=new ArrayList<>();
于 2013-10-24T07:00:52.020 回答
3

ASet不允许重复。

不包含重复元素的集合。更正式地说,集合不包含一对元素 e1 和 e2 使得 e1.equals(e2),并且最多包含一个空元素。

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
于 2013-10-24T07:01:25.503 回答
2

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

于 2013-10-24T07:08:59.417 回答
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());
于 2013-10-24T07:14:19.153 回答