关键词不能为空

当前您在: 主页 > 英语 >

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
1970-01-01 08:00
tags:

-

2021年1月23日发(作者:adolescents)
如题:

List
list1

List
list2,
两个集合各有上万个元素,
怎样取出两个集合中不同的元素
?
方法
1
:遍历两个集合:


package


import
ist;
import


public

class
TestList {


public

static

void
main(String[] args) {
List list1 =
new
ArrayList();
List list2 =
new
ArrayList();

for
(
int
i = 0; i < 10000; i++) {
(
(
}
getDiffrent(list1,list2);

//
输出:
total times 2566454675

}


/**

*
获取两个
List
的不同元素

*
@param

list1
*
@param

list2
*
@return


*/


private

static

List
getDiffrent(List
list1,
List list2) {

long
st = me();
List diff =
new
ArrayList();

for
(String str:list1)
{

if
(!ns(str))
{
(str);
}
}
n(

return
diff;
}
}

千万不要采用这种方法,
总共要循环的次数是两个
List
size
相乘的积,
从输
出看耗时也是比较长的,那么我们有没有其他的方法呢? 当然有
.
方法
2
:采用
List
提供的
reta inAll
()方法:


package


import
ist;
import


public

class
TestList {


public

static

void
main(String[] args) {
List list1 =
new
ArrayList();
List list2 =
new
ArrayList();

for
(
int
i = 0; i < 10000; i++) {
(
(
}
getDiffrent(list1,list2);

//
输出:
total times 2566454675

getDiffrent2(list1,list2);

//
输出:
getDiffrent2 total times 2787800964

}


/**

*
获取连个
List
的不同元素

*
@param

list1
*
@param

list2
*
@return


*/


private

static

List
getDiffrent2(List
list1,
List list2) {

long
st = me();
All(list2);
n(
total


return
list1;
}


/**

*
获取两个
List
的不同元素

*
@param

list1
*
@param

list2
*
@return


*/


private

static

List
getDiffrent(List
List list2) {

long
st = me();
List diff =
new
ArrayList();

for
(String str:list1)
{

if
(!ns(str))
{
(str);
}
times
list1,
}
n(


return
diff;
}
}
total
times

很遗憾,
这种方式虽然只要几行代码就搞定,
但是这个却更耗时,
查看
re tainAll
()的源码
:


public

boolean
retainAll(Collection c) {

boolean
modified =
false
;
Iterator e = iterator();

while
(t()) {

if
(!ns(())) {
();
modified =
true
;
}
}

return
modified;
}

无需解释这个耗时是必然的,
那么我们还有没有更好的办法呢?仔细分析以上两
个方法中我都做了
mXn
次循环,其实完全没有必要循环这么多次,我们的需


是找出两个
List
中的不同元素
,
那么我可以这样考虑 :用一个
map
存放
lsit

所有元素,其中的
key< br>为
lsit1
的各个元素,
value
为该元素

出 现的次数
,
接着

list2
的所有元素也放到
map里,如果已经存在则
value

1
,最后我们只要
取出
map

value

1
的元素即可,
这样我们只

需循环
m+n
次,
大大减少了循环
的次数。


package


import
ist;
import
p;
import

import
;

public

class
TestList {


public

static

void
main(String[] args) {
List list1 =
new
ArrayList();
List list2 =
new
ArrayList();

for
(
int
i = 0; i < 10000; i++) {
(
(
}
getDiffrent(list1,list2);

//
输出:
total times 2566454675

getDiffrent2(list1,list2);

//
输出:
getDiffrent2 total times 2787800964

getDiffrent3(list1,list2);

//
输出:
getDiffrent3 total times 61763995

}

/**

*
获取两个
List
的不同元素

*
@param

list1
*
@param

list2
*
@return


*/


private

static

List
getDiffrent3(List
List list2) {

long
st = me();
Map
map
=
HashMap(()+());
List diff =
new
ArrayList();

for
(String string : list1) {
(string, 1);
}

for
(String string : list2) {
Integer cc = (string);

if
(cc!=
null
)
{
(string, ++cc);
new
list1,


continue
;
}
(string, 1);
}

for
( entry:et())
{

if
(ue()==1)
{
(());
}
}
n(
total


return
list1;
}


/**

*
获取两个
List
的不同元素

*
@param

list1
*
@param

list2
*
@return


*/


private

static

List
getDiffrent2(List
List list2) {

long
st = me();
times
list1,
All(list2);
n(
total


return
list1;
}


/**

*
获取两个
List
的不同元素

*
@param

list1
*
@param

list2
*
@return


*/


private

static

List
getDiffrent(List
List list2) {

long
st = me();
List diff =
new
ArrayList();

for
(String str:list1)
{

if
(!ns(str))
{
(str);
}
}
n(
total


return
diff;
times
times
list1,
}
}

显然,这种方法大大减少耗时,是方法
1

1/4
,是方 法
2

1/40
,这个性能的提
升时相当可观的,
但是,< br>这不是最佳的解决方法,
观察方法
3
我们只

是随机取了一个
list
作为首次添加的标准,这样一旦我们的
list2

list1

size
大,则
我们第二次
put
时的if
判断也会耗时,做如下改进:


package


import
ist;
import
p;
import

import


public

class
TestList {


public

static

void
main(String[] args) {
List list1 =
new
ArrayList();
List list2 =
new
ArrayList();

for
(
int
i = 0; i < 10000; i++) {
(
(
}
getDiffrent(list1,list2);
getDiffrent2(list1,list2);
getDiffrent3(list1,list2);
getDiffrent4(list1,list2);
//

getDiffrent total times 2789492240
//

getDiffrent2 total times 3324502695
//

getDiffrent3 total times 24710682
//

getDiffrent4 total times 15627685

}

/**

*
获取两个
List
的不同元素

*
@param

list1
*
@param

list2
*
@return


*/


private

static

List
getDiffrent4(List
List list2) {

long
st = me();
Map
map
=
HashMap(()+());
List diff =
new
ArrayList();
List maxList = list1;
List minList = list2;

if
(()>())
{
new
list1,

-


-


-


-


-


-


-


-



本文更新与1970-01-01 08:00,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/556975.html
    上一篇:没有了
    下一篇:没有了

的相关文章

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文