java中两个list对比有啥好办法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中两个list对比有啥好办法?相关的知识,希望对你有一定的参考价值。

最简单的方法就是二重循环,可有没有直接的方法可以把两个LIST的数据做比对?然后取出一样的来?

为什么不好好看看JAVA API呢.上面都有啊.

Arrays.equals(Object[] a, Object[] a2)
如果两个指定的 Objects 数组彼此相等,则返回 true。

Arrays.deepEquals(Object[] a1, Object[] a2)
如果两个指定数组彼此是深层相等 的,则返回 true。

如果你比较了之后,还要取出一样的元素,那么JAVA没有这种函数了.只能循环了.

我说楼上的.现在用泛化和双参FOR循环的是JDK1.5以上才用的,如果楼主用的不懂这些你只能让他更加难以理解.不要用问题解决问题.
参考技术A 谁说的用2重循环最简单了???不能说的太绝对了。如果你的List放的不是对象,使用这个方法。举个例子contains(Object o)
方法
List<String> lt1 = new ArrayList<String>();
lt1.add("ab");
lt1.add("bb");
lt1.add("cc");
List<String> lt2 = new ArrayList<String>();
lt2.add("ab");
lt2.add("cc");
lt2.add("dd");
for(String kk:lt1)
if(lt2.contains(kk))
System.out.println(kk);

C++链表表示法,有啥区别?

【中文标题】C++链表表示法,有啥区别?【英文标题】:C++ linked list notation, what is the difference?C++链表表示法,有什么区别? 【发布时间】:2021-01-09 11:04:50 【问题描述】:

我只是想知道这两个符号之间是否有区别:

第一个例子:

    struct node
      int data;
      node* next;
   ;
    void insert(node* list)
      node* n,* last;
      last = list;
      while(last)
         last = last -> next;
      n = new node;
      last = n;
      n -> next = NULL;
      cin >> n -> data;
   
    int main()
      node* list = new node;
      list -> next = NULL;
      insert(list);
      return 0;
    

第二个例子:

    struct node
      int data;
      node* next;
   ;
    void insert(node* list)
      node* n,* last;
      last = list -> next;
      while(last)
         last = last -> next;
      n = new node;
      last = n;
      n -> next = NULL;
      cin >> n -> data;
   
    int main()
      node* list = new node;
      list -> next = NULL;
      insert(list);
      return 0;
    

所以我想知道符号谎言之间是否有区别: 在第一个例子中:

last = list;

在第二个例子中

last = lista -> next;

node* list 在 void insert(node* list) 中做什么/代表什么 这只是一个指向任何列表的指针,一个指向主列表的指针,还是什么?

【问题讨论】:

显然是有区别的。如果list 是空指针怎么办? 它们当然有一个共同点——两个示例都无法编译,因为lista 是一个未声明的标识符。 您在代码中泄漏了大量内存。并尝试使用 RAII。 是的,我知道我没有释放内存,我只是想知道区别,但现在我想我明白了。感谢@JHBonarius 提供的信息,你和 Evg7 的 cmets 是这里唯一有用的 cmets,其他人只是投反对票,或者指出错别字,非常感谢:) 【参考方案1】:

您的上述解释是正确的,但让我再补充一点,假设您的

list = NULL;

void insert(node* list)
  node* n,* last;
  last = list -> next;
  while(last)
     last = last -> next;
  n = new node;
  last = n;
  n -> next = NULL;
  cin >> n -> data;

然后在上述情况下,您尝试访问“NULL”的下一个 list-&gt;next,因此它会给您运行时错误,因为您无法访问 nullptr 的下一个,因为它没有定义。

【讨论】:

感谢您更新答案;) 快乐是我的全部@Demigod98 !很高兴分享(-:【参考方案2】:
struct node
  int data;
  node* next;
;

void insert(node* list)
  node* n,* last;
  last = list;
  while(last -> next)
     last = last -> next;
  n = new node;
  last = n;
  n -> next = NULL;
  cin >> n -> data;


int main()
  node* list = new node;
  list -> next = NULL;
  insert(list);
  return 0;

好吧,显然没有人想给我答案,所以我自己找到了答案。这就是编码的样子。 原因:

last = list -> next;

以下内容不起作用:list -> next 被声明为 NULL 因为一开始它不指向任何元素,所以显而易见的答案是:

last = list;

因为列表包含指向下一个元素的头部地址

【讨论】:

以上是关于java中两个list对比有啥好办法?的主要内容,如果未能解决你的问题,请参考以下文章

linuxC语言 从一个只读文件中取出目标字符串后面的值,有啥好办法

有啥好办法可以让DOS批处理后台运行,不显示窗口

在source insight里有啥好办法一次性把tab替换为空格?

bootstrap-table 支持跨域吗,如果不支持的话 有啥好办法

笨办法就是好办法

Java中有没有啥办法可以将两个类的属性值映射?