Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将重复元组列表转换为唯一元组列表?

如何将重复元组列表转换为唯一元组列表?
EN

Stack Overflow用户
提问于 2018-03-08 04:05:34
回答 3查看 1.2K关注 0票数 1

我正在编写一段代码,其中包含具有重复项的元组列表,我希望从该列表中删除重复项,而不使用HASHSET或SET。我只被允许使用数组、ArrayList和迭代器。

下面的代码将溢出/无限循环。我理解为什么它会进入无限循环周期,因为我添加了元素,大小也增加了。

元组类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Tuple {
    private int key;
    private String value;

    public Tuple(int keyP, String valueP) {
        key = keyP;
        value = valueP;
    }

    public int getKey() {
        return key;
    }  

    public String getValue() {
        return value;
    }

    public boolean equals(Tuple t) {
        if (this.key == t.getKey() && this.value.equals(t.getValue())) {
            return true;
        }
        else return false;
    }
}

ArrayList < Tuple > union= new ArrayList<Tuple>();
ArrayList < Tuple > unique= new ArrayList<Tuple>();

Union: [Tuple < 15, a >, Tuple < 17, a >, Tuple < 15, a >, Tuple<79, b>] 

unique.add(union.get(0));

for (int k = 1; k < union.size(); k++) {
    Tuple test= union.get(k);
    for (int j= 0; j < unique.size();j++) {
        if (!test.equals(unique.get(j))) {
            System.out.println(union.get(k));
            unique.add(union.get(k));
        }
    }
}

唯一的应该是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Tuple< 15, a >, Tuple< 17, a >, Tuple< 79, b >] 

我完全被困了一天多。请帮帮我。

EN

回答 3

Stack Overflow用户

发布于 2018-03-08 04:43:09

在元组的键、值变量上重写equals()hashCode()方法。这样就可以直接使用List的contains()方法,而不是每次都循环遍历unique List。

文件: Tuple.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Tuple {
    private int key;
    private String value;

    public Tuple(int keyP, String valueP) {
        key = keyP;
        value = valueP;
    }

    public int getKey() {
        return key;
    }

    public String getValue() {
        return value;
    }

    @Override
    public String toString() {
        return "Tuple [key=" + key + ", value=" + value + "]";
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + key;
        result = prime * result + ((value == null) ? 0 : value.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Tuple other = (Tuple) obj;
        if (key != other.key)
            return false;
        if (value == null) {
            if (other.value != null)
                return false;
        } else if (!value.equals(other.value))
            return false;
        return true;
    }
}

文件: TupleMain.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TupleMain {
    public static void main(String[] args) {
        List<Tuple> union = Arrays.asList(new Tuple(15, "a"), new Tuple(17, "a"), new Tuple(15, "a"),
                new Tuple(79, "b"));
        List<Tuple> unique = new ArrayList<Tuple>();

        unique.add(union.get(0));
        for (int k = 1; k < union.size(); k++) {
            Tuple test = union.get(k);
            if (!unique.contains(test)) {
                unique.add(test);
            }
        }

        System.out.println(unique);

        // The Java 8 way
        union.stream().distinct().forEach(System.out::println);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2018-03-08 04:46:47

可能还有更好的选择,但根据您的需求,您可以在循环中添加一个标志……

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    ArrayList<Tuple> union= new ArrayList<Tuple>();
    ArrayList<Tuple> unique= new ArrayList<Tuple>();

    union.add(new Tuple(15, "a"));
    union.add(new Tuple(17, "a"));
    union.add(new Tuple(15, "a"));
    union.add(new Tuple(79, "b"));

    unique.add(union.get(0));

    for(int k=1;k<union.size();k++) {

        Tuple test=union.get(k);
        Boolean exists = false;
        for(int j=0;j<unique.size();j++) {

            if(test.equals(unique.get(j))) {
                exists = true; 
                break;
            }
        }

        if(!exists) {
            System.out.println(union.get(k));
            unique.add(union.get(k)); 
        }

    } 
票数 0
EN

Stack Overflow用户

发布于 2018-03-08 04:29:46

如果没有数据,我们可以承认编译器对一个空的元组列表执行操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-> union.stream().distinct()
|  Expression value is: java.util.stream.DistinctOps$1@4493d195
|    assigned to temporary variable $58 of type Stream<Tuple>
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49165234

复制
相关文章
应该抛出什么异常?不应该抛出什么异常?(.NET/C#)
2018-02-04 13:25
walterlv
2018/09/18
1.7K0
c++构造函数是否可以抛出异常_什么叫抛出异常
从语法上来说,构造函数可以抛出异常。但从逻辑上和风险控制上,构造函数中尽量不要抛出异常。万不得已,一定要注意防止内存泄露。
全栈程序员站长
2022/09/22
1.7K1
Python抛出异常_python抛出异常的作用
在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误
全栈程序员站长
2022/11/02
2.5K0
【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )
1. 异常处理 : 使用 " try{}catch(){} " 将抛出异常的代码包起来 , 注意将可能抛出异常的代码包裹在 try 后的大括号中 , 将异常处理逻辑放在 catch 后的大括号中 ;
韩曙亮
2023/03/27
1.3K0
【C++】异常处理 ④ ( 异常接口声明 | 异常接口语法 | 抛出一种类型的异常 | 抛出多种类型的异常 | 抛出任意类型的异常 | 不能抛出异常 | 抛出异常类型错误 | 代码示例 )
在 C++ 中 , 异常可以使用 任意 类型 进行表示 , 但是 一般情况下 使用 派生自 标准异常类 std::exception 的 自定义异常类 来表示 异常 ;
韩曙亮
2023/12/01
6130
【C++】异常处理 ④ ( 异常接口声明 | 异常接口语法 | 抛出一种类型的异常 | 抛出多种类型的异常 | 抛出任意类型的异常 | 不能抛出异常 | 抛出异常类型错误 | 代码示例 )
python抛出异常会终止程序吗_catch里面抛出异常
如果没有 try 和 except 语句覆盖抛出异常的 raise 语句,该程序就会崩溃,并显示异常的出错信息。通常是调用该函数的代码知道如何处理异常,而不是该函数本身。所以你常常会看到 raise 语句在一个函数中,try 和 except 语句在调用该函数的代码中。
全栈程序员站长
2022/11/19
2.2K0
android 抛出FileNotFoundException异常
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/17
1.6K0
.net remoting 抛出异常
所有在远程软件运行的类,如果需要传输到本地,都需要继承 MarshalByRefObject 或其他可以序列化的类。
林德熙
2018/09/19
1.5K0
.net remoting 抛出异常
dotnet remoting 抛出异常
所有在远程软件运行的类,如果需要传输到本地,都需要继承 MarshalByRefObject 或其他可以序列化的类。
林德熙
2019/09/27
1.4K0
dotnet remoting 抛出异常
python抛出异常和捕获异常_在try块中可以抛出异常吗
2.解析 关键字try 以及except是 使用Python 解释器主动抛出异常的关键, Python解释器从上向下执行 当运行try中的某行代码出错,会直接进入except中执行下方代码 try中错行下方的代码不会被运行 except…as… 是固定的语法格式 打印traceback信息 finally 后的代码不管是否抛出异常都会执行 except 的原理 调用sys中 exc.info 方法返回基本信息 所以抛出异常的第一步拓展可以在这里开始 注意 每个关键字下方的代码都是独立的(所有的变量都是局部变量)
全栈程序员站长
2022/11/02
4.6K0
dotnet remoting 抛出异常
所有在远程软件运行的类,如果需要传输到本地,都需要继承 MarshalByRefObject 或其他可以序列化的类。
林德熙
2022/08/04
1K0
【C++】异常处理 ⑦ ( 异常类的继承层次结构 | 抛出 / 捕获 多个类型异常对象 | 抛出子类异常对象 / 捕获并处理 父类异常对象 )
也就是说 在 同一个 try-catch 代码块中 , 如果需要 拦截 和 处理多个 异常时 ,
韩曙亮
2023/12/04
2340
【C++】异常处理 ⑦ ( 异常类的继承层次结构 | 抛出 / 捕获 多个类型异常对象 | 抛出子类异常对象 / 捕获并处理 父类异常对象 )
python抛出异常和捕获异常_Python异常
class Widget: def __init__(self,size=(40,40)): self._size=size def getSize(self): return self._size def resize(self,width,height): if width<0 or height<0:
全栈程序员站长
2022/11/02
2.9K0
python抛出异常会终止程序吗_python抛出异常的作用
当python执行无效的代码时,就会抛出异常。用 try 和 catch 语句可以处理异常,以避免程序的崩溃。我们也可以在代码中抛出自己的异常,抛出异常意味着 停止运行这个函数中的代码,将程序执行转到except语句
全栈程序员站长
2022/11/02
1.8K0
Java 捕获和抛出异常
Java中把非正常情况分为两种:异常(Exception)和错误(Error),其中Error错误一般是指与虚拟机相关的问题,这种错误无法恢复或不可能捕获,而对于Exception异常我们可以使用try…catch进行捕获。try…catch不允许存在单独的try块或catch块,可存在多个catch块。try块中存放业务功能代码,catch块中存放异常处理代码。Java7后支持用catch捕获多个异常,也可捕获自定义异常。对于捕获的异常一般可以使用printStackTrace()方法追踪输出至标准错误流。try…catch后可以添加finally,使用finally可以保证除系统退出外finally块中代码绝对执行。捕获异常时需要注意一定要先捕获小异常,再捕获大异常,否则小异常将无法被捕获。代码示例如下
用户7886150
2021/04/06
1.9K0
django 主动抛出 403 异常
* 网站名称:obaby@mars * 网址:https://h4ck.org.cn/ * 本文标题: 《django 主动抛出 403 异常》 * 本文链接:https://h4ck.org.cn/2018/12/django-%e4%b8%bb%e5%8a%a8%e6%8a%9b%e5%87%ba-403-%e5%bc%82%e5%b8%b8/ * 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。
obaby
2023/02/24
7590
python中用来抛出异常的关键字是( )_python异常抛出
动抛出异常raise typeerror(类型错误) # 7. 触发异常try: raise typeerror(类型错误)except exception as e: print(e) # 8. 自定义异常class my…syntaxerror 语法错误 python代码非法,代码不能编译(个人认为这是语法错误,写错了) typeerror 类型错误传入对象类型与要求的不符合 unboundlocalerror …
全栈程序员站长
2022/11/02
1K0
当 snapshot 失败时发生了什么
工作中遇到了与 snapshot 异常相关的问题,特此总结一下,与 snapshot 相关的流程图如下:
shengjk1
2020/10/16
1K0
当 snapshot 失败时发生了什么
Java 如何抛出异常、自定义异常
1、定义 : 一个方法不处理这个异常,而是调用层次向上传递,谁调用这个方法,这个异常就由谁来处理。
Java编程指南
2019/08/02
4.8K0
Java 如何抛出异常、自定义异常
interrupt+抛出异常测试
建议使用“抛异常”的方法来实现线程的停止,因为在catch块中可以对异常的信息进行相关的处理,而且使用异常流能更好、更方便的控制程序的运行流程,不至于代码中出现很多个return;污染代码。
用户7365393
2021/10/07
5000

相似问题

AngularJs - $resource -标头CORS

11

AngularJS $resource标头文章

11

扩展ng.resource.IResourceClass时访问标头

11

向角$resource请求添加标头

20

AngularJS $resource自定义标头

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文