Java 只能包含一次值的列表
这肯定是一个noob问题,但我在谷歌或这里都找不到好的答案,所以我不得不问: 当我只想添加一次值时,我应该在Java中使用什么样的列表 问题是我在大学里做一个网络技术项目(一个网店),我也连接了这个云。我可以向在我的商店购买商品的人申请客户ID。我想做的是提取这些ID并将其添加到列表中。但是在提取它们时,我会得到他们购买的每件商品的ID,因此我想要一个列表,可以检查:“此值已在此列表中,请不要执行任何操作”或“此ID不在列表中,让我们添加ID”Java 只能包含一次值的列表,java,list,Java,List,这肯定是一个noob问题,但我在谷歌或这里都找不到好的答案,所以我不得不问: 当我只想添加一次值时,我应该在Java中使用什么样的列表 问题是我在大学里做一个网络技术项目(一个网店),我也连接了这个云。我可以向在我的商店购买商品的人申请客户ID。我想做的是提取这些ID并将其添加到列表中。但是在提取它们时,我会得到他们购买的每件商品的ID,因此我想要一个列表,可以检查:“此值已在此列表中,请不要执行任何操作”或“此ID不在列表中,让我们添加ID” 有没有一个列表可以做到这一点,或者有没有一种方法可
有没有一个列表可以做到这一点,或者有没有一种方法可以在列表不太复杂的情况下做到这一点?如果需要一个
集,这就是防止重复的数据结构。这是一个集合
,因此您可以定义如下函数:
public Collection<MyObject> foo()
{
return new HashSet<MyObject>();
}
public Collection foo()
{
返回新的HashSet();
}
在以后的时间内,将内部返回更改为:
public Collection<MyObject> foo()
{
return new ArrayList<MyObject>();
}
public Collection foo()
{
返回新的ArrayList();
}
而且你的API不会中断。如果你想要一个集,这就是防止重复的数据结构。这是一个集合
,因此您可以定义如下函数:
public Collection<MyObject> foo()
{
return new HashSet<MyObject>();
}
public boolean insertRecord(Programmer targetProgrammer, List programmerList) {
boolean flag = false;
for (Programmer p : programmerList){
if (targetProgrammer.getId() == p.getId()) {
return true;
}
}
return flag;
}
// Then when you invoke:
Programmer target = new Programmer(1,"Dev","Java");
if (!insertRecord(target, myList)) {
myList.add(target);
}
public Collection foo()
{
返回新的HashSet();
}
在以后的时间内,将内部返回更改为:
public Collection<MyObject> foo()
{
return new ArrayList<MyObject>();
}
public Collection foo()
{
返回新的ArrayList();
}
而且您的API不会中断。您将寻找的是一个集,因为集是一个不包含重复项的集合
public boolean insertRecord(Programmer targetProgrammer, List programmerList) {
boolean flag = false;
for (Programmer p : programmerList){
if (targetProgrammer.getId() == p.getId()) {
return true;
}
}
return flag;
}
// Then when you invoke:
Programmer target = new Programmer(1,"Dev","Java");
if (!insertRecord(target, myList)) {
myList.add(target);
}
根据您的需要,您可以使用以下几种类型:
- 哈希集
- 链接数据集
- CopyOnWriteArraySet
- 枚举集
- 树集
- ConcurrentSkipListSet
您将寻找的是一个集合,因为集合是一个不包含重复项的集合
根据您的需要,您可以使用以下几种类型:
- 哈希集
- 链接数据集
- CopyOnWriteArraySet
- 枚举集
- 树集
- ConcurrentSkipListSet
更好地使用它,因为它隐式地解决了唯一ID的问题。更好的是,您可以自动按排序顺序打印唯一元素。更好地使用它,因为它隐式地解决了唯一ID的问题。更好的是,您可以自动按排序顺序打印唯一元素。一个集合只包含每个值一次
但是,问题是元素的添加顺序丢失了。因此,如果您想保持元素的顺序,我建议使用
对于LinkedHashSet,迭代元素将按插入顺序返回它们
public static void main(String[] args) {
Set<String> hashSet = new HashSet<>();
hashSet.add("first");
hashSet.add("second");
hashSet.add("third");
for (String s : hashSet) {
System.out.println(s); // no particular order
}
Set<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("first");
linkedHashSet.add("second");
linkedHashSet.add("third");
for (String s : linkedHashSet) {
System.out.println(s); // "first", "second", "third"
}
}
publicstaticvoidmain(字符串[]args){
Set hashSet=新hashSet();
添加(“第一”);
添加(“第二”);
添加(“第三”);
for(字符串s:hashSet){
System.out.println(s);//无特定顺序
}
Set linkedHashSet=new linkedHashSet();
linkedHashSet.add(“第一”);
linkedHashSet.add(“第二”);
linkedHashSet.add(“第三”);
for(字符串s:linkedHashSet){
System.out.println(s);/“第一”、“第二”、“第三”
}
}
一个集合只包含每个值一次
但是,问题是元素的添加顺序丢失了。因此,如果您想保持元素的顺序,我建议使用
对于LinkedHashSet,迭代元素将按插入顺序返回它们
public static void main(String[] args) {
Set<String> hashSet = new HashSet<>();
hashSet.add("first");
hashSet.add("second");
hashSet.add("third");
for (String s : hashSet) {
System.out.println(s); // no particular order
}
Set<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("first");
linkedHashSet.add("second");
linkedHashSet.add("third");
for (String s : linkedHashSet) {
System.out.println(s); // "first", "second", "third"
}
}
publicstaticvoidmain(字符串[]args){
Set hashSet=新hashSet();
添加(“第一”);
添加(“第二”);
添加(“第三”);
for(字符串s:hashSet){
System.out.println(s);//无特定顺序
}
Set linkedHashSet=new linkedHashSet();
linkedHashSet.add(“第一”);
linkedHashSet.add(“第二”);
linkedHashSet.add(“第三”);
for(字符串s:linkedHashSet){
System.out.println(s);/“第一”、“第二”、“第三”
}
}
不是列表,你需要一个。不是列表,你需要一个。重新创建控制盘。一个集合已经处理了这个功能。是的,我知道,但在一些学校,你被要求只使用ArrayList开始工作,而不允许使用其他类型的列表、映射或集合,因此如果是这样的话,有一个使用ArrayList的解决方案。致以最良好的祝愿。当然,在这种情况下,重点是让学生自己做作业,以便学到一些东西。此外,方法“insertRecord()”可能应该插入记录或重命名。重新创建控制盘。一个集合已经处理了这个功能。是的,我知道,但在一些学校,你被要求只使用ArrayList开始工作,而不允许使用其他类型的列表、映射或集合,因此如果是这样的话,有一个使用ArrayList的解决方案。致以最良好的祝愿。当然,在这种情况下,重点是让学生自己做作业,以便学到一些东西。另外,方法“insertRecord()”可能应该插入一条记录,或者被重命名。在这里最好使用泛型。是否有一个集合可以自动按值对其进行排序?我知道TreeSet可以按键排序,但我需要一种方法来轻松获得5个具有最高值的对象?在这里使用泛型可能是最好的。是否有一个集合可以自动按值排序?我知道TreeSet可以按键排序,但我需要一种方法来轻松获得具有最高值的5个对象?以保持元素排序的开销为代价。以保持元素排序的开销为代价。