Java에서 두 세트 사이에 교집합이 있는지 확인하는 방법

王林
풀어 주다: 2020-11-20 15:13:58
앞으로
16400명이 탐색했습니다.

Java에서 두 세트 사이에 교집합이 있는지 확인하는 방법

배경:

프런트엔드는 목록 컬렉션을 전달하고 백엔드 필드도 (1,2,3,4) 형식입니다. SQL을 사용하지 않고 프런트 엔드에서 전달한 집합이 백엔드 필드 집합에 있는지 어떻게 확인합니까?

(학습영상 공유 :java 교육영상)

Code :

public static boolean judgeIntersection(List list1,List list2){ boolean flag = false; // 使用retainAll会改变list1的值,所以写一个替代 List origin = new ArrayList<>(); origin.addAll(list1); origin.retainAll(list2); // 有交集 if(origin.size()>0){ flag = true; } return flag; }
로그인 후 복사

boolean flag = Origin.retainAll(Collection c)

Origin에 Collection C에 없는 데이터가 있는 경우 , false를 반환합니다. true가 반환되지 않습니다

동시에 원본 세트가 변경되고 두 세트의 동일한 데이터만 유지됩니다. 즉, 원본 세트에서 데이터가 삭제되어 false가 반환됩니다

그래서 확인하는 방법은 무엇입니까? 교차로가 있는지?

1. 두 세트 중 어느 것도 동일하지 않고 원점은 비어 있으며 반환 값은 false입니다.

2. 우연히 두 세트의 원점 데이터는 모두 c에 있고 원점은 변경되지 않고 반환됩니다. value is true

이 두 가지 특별한 상황은 단순히 반환 값 true 또는 false에만 의존하여 교차점을 판단하는 것이 불가능하다는 사실로 이어집니다. 따라서 원본 컬렉션 수 >0에 따라 교차점이 있습니다

retainAll(Collection c) 소스 코드

public boolean retainAll(Collection c) { // 判断c集合是否为空 Objects.requireNonNull(c); return batchRemove(c, true); } private boolean batchRemove(Collection c, boolean complement) { // 得到调用该函数的集合。因为是引用类型,所以修改了都会有变化 final Object[] elementData = this.elementData; // w:记录交集的数据都放到elementData前面,w是其位置分界线 int r = 0, w = 0; // 返回值 用于判断elementData有没有被修改 boolean modified = false; try { // 循环elementData集合,判断其中元素是否在c集合中 for (; r < size; r++) // 若在集合中,则w自增,并将该值放到elementData[w]中,即是交集的数据都放到集合的前面 if (c.contains(elementData[r]) == complement) elementData[w++] = elementData[r]; } finally { // Preserve behavioral compatibility with AbstractCollection, // even if c.contains() throws. // 正常情况下,经过上面的循环,r==size。为防止出现循环异常,将由于异常导致的r到size是交集的数据但并没有放到对应w的位置的数据,都放到对应w之后的位置上 if (r != size) { System.arraycopy(elementData, r, elementData, w, size - r); w += size - r; } // 若elementData中有数据不在c集合中,就清理掉w位置之后的数据,便于垃圾回收 if (w != size) { // clear to let GC do its work for (int i = w; i < size; i++) elementData[i] = null; // 记录elementData集合被增删的次数,这里是删除 modCount += size - w; // 赋值最新的size size = w; // elementData集合被清理,modified为true modified = true; } } return modified; }
로그인 후 복사

관련 권장 사항:java 소개 튜토리얼

위 내용은 Java에서 두 세트 사이에 교집합이 있는지 확인하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!