Java删除重复的数据

Java删除重复的数据,java,arraylist,hashmap,Java,Arraylist,Hashmap,可以在arraylist或hashmap中获取所有不同的值吗 比如说,我在arraylist上有如下元素: 123, 123, 456, 123, 456, 000 在HashMap中: 123, test1 123, test2 456, test3 123, test4 000, test5 键在HashMap中应该是唯一的。如果选择的是重复关键帧,则现有关键帧值将替换为新值 如果要避免重复,请使用HashMap中唯一的键。如果选择的是重复关键帧,则现有关键帧值将替换为新值 如果要避免重

可以在arraylist或hashmap中获取所有不同的值吗

比如说,我在arraylist上有如下元素:

123, 123, 456, 123, 456, 000
在HashMap中:

123, test1
123, test2
456, test3
123, test4
000, test5

键在HashMap中应该是唯一的。如果选择的是重复关键帧,则现有关键帧值将替换为新值


如果要避免重复,请使用HashMap中唯一的键。如果选择的是重复关键帧,则现有关键帧值将替换为新值


如果要避免重复,请使用
设置

哈希映射不允许重复键。如果您输入了一个已经存在的密钥,那么它将用新密钥替换它。

哈希映射不允许重复密钥。如果您输入一个已经存在的密钥,则它将用新密钥替换该密钥。

如果您使用的是
地图
,根据定义,这些密钥将是唯一的。对于
List
的实现,有几个选项。对于Java5到Java7

public <T> List<T> removeDuplicates(List<T> list){
    Set<T> set = new LinkedHashSet<>(list);
    return new ArrayList<>(set);
}
移除的公共列表副本(列表){
Set Set=newlinkedhashset(列表);
返回新的ArrayList(集合);
}
使用Java8

public <T> List<T> removeDuplicatesJava8(List<T> list){
    return list.stream().distinct().collect(Collectors.toList());
}
public List removeDuplicatesJava8(列表列表){
return list.stream().distinct().collect(Collectors.toList());
}

如果您使用的是
地图
,根据定义,按键将是唯一的。对于
List
的实现,有几个选项。对于Java5到Java7

public <T> List<T> removeDuplicates(List<T> list){
    Set<T> set = new LinkedHashSet<>(list);
    return new ArrayList<>(set);
}
移除的公共列表副本(列表){
Set Set=newlinkedhashset(列表);
返回新的ArrayList(集合);
}
使用Java8

public <T> List<T> removeDuplicatesJava8(List<T> list){
    return list.stream().distinct().collect(Collectors.toList());
}
public List removeDuplicatesJava8(列表列表){
return list.stream().distinct().collect(Collectors.toList());
}
如果要将多个值映射到一个键,可以使用
映射
(或
映射
):

代码:

public static void main(String[] args) {
    Map<Integer, List<String>> data = new HashMap<>();
    add(data, 123, "test1");
    add(data, 123, "test2");
    add(data, 456, "test3");
    add(data, 123, "test4");
    add(data,   0, "test5");
    data.forEach((k, v) -> System.out.println(k + " -> " + v));
}

static <K, V> void add(Map<K, List<V>> listMap, K key, V value) {
    List<V> values = listMap.get(key);
    if(values == null) {
        values = new ArrayList<V>();
        listMap.put(key, values);
    }
    values.add(value);
}
0 -> [test5]
456 -> [test3]
123 -> [test1, test2, test4]
如果要将多个值映射到一个键,可以使用
映射
(或
映射
):

代码:

public static void main(String[] args) {
    Map<Integer, List<String>> data = new HashMap<>();
    add(data, 123, "test1");
    add(data, 123, "test2");
    add(data, 456, "test3");
    add(data, 123, "test4");
    add(data,   0, "test5");
    data.forEach((k, v) -> System.out.println(k + " -> " + v));
}

static <K, V> void add(Map<K, List<V>> listMap, K key, V value) {
    List<V> values = listMap.get(key);
    if(values == null) {
        values = new ArrayList<V>();
        listMap.put(key, values);
    }
    values.add(value);
}
0 -> [test5]
456 -> [test3]
123 -> [test1, test2, test4]

要从
列表中获取唯一元素的
集合
,您可以这样做

Set<Object> set = new HashSet<Object>(nonUniqueList);
Set Set=newhashset(非唯一查询列表);

要从
列表中获取唯一元素的
集合
,您可以这样做

Set<Object> set = new HashSet<Object>(nonUniqueList);
Set Set=newhashset(非唯一查询列表);


在这种情况下使用a;我不知道如何将
123
再次存储为
Map
中的键。我只是假设是否可以在HashMap中放置重复的键。集合(如HashSet)是不同元素的集合。HashMap不能为同一个键具有重复的值。用户guava MultiMap用于该行为;我不知道如何将
123
再次存储为
Map
中的键。我只是假设是否可以在HashMap中放置重复的键。集合(如HashSet)是不同元素的集合。HashMap不能为同一个键具有重复的值。用户guava MultiMap进行该行为。如果我读取一个文本文件并将其放在HashMap上,会发生什么情况?我的文本文件有多个数据。在HashMap中,它将覆盖最后一个值,以便您能够看到为同一个键添加的最后一个值。因此,简而言之,现有键将替换为与该键相同的另一个键。对吗?现有密钥将替换为新密钥。这意味着您丢失了现有的密钥数据。如果我读取一个文本文件并将其放在HashMap上,会发生什么情况?我的文本文件有多个数据。在HashMap中,它将覆盖最后一个值,以便您能够看到为同一个密钥添加的最后一个值。因此,简而言之,现有密钥将替换为与该密钥相同的另一个密钥。对吗?现有密钥将替换为新密钥。这意味着您丢失了现有的关键数据。使用Java6如何?参见第一个示例。“pre-java8”是指java8之前的任何东西。这将包括Java6。哦,对不起,我没有看到那个。谢谢你解释这个@MadConan。所以最好使用Java8,因为它有不同的方法。Java6怎么样?参见第一个示例。“pre-java8”是指java8之前的任何东西。这将包括Java6。哦,对不起,我没有看到那个。谢谢你解释这个@MadConan。所以最好使用Java8,因为它有独特的方法。太棒了!感谢您的支持,我现在明白Set和HashMap是如何工作的了@你应该投票给任何对你有帮助的答案。太棒了!感谢您的支持,我现在明白Set和HashMap是如何工作的了@你应该投票选出对你有帮助的答案。