问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在Java中判断数组中包含某个元素的几种方式的比较

发布网友 发布时间:2022-04-20 00:25

我来回答

2个回答

热心网友 时间:2023-08-02 03:53

直接上代码:
package test.contain.lishaojie;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class TestContain {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] arr = new String[] { "DD", "CC", "DD", "FF", "KK"};
String target ="A";
int times = 1000;//次数
//转换成list方式
long startTime = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
ByList(arr, target);
}
long endTime = System.currentTimeMillis();
long ration = endTime - startTime;
System.out.println("list方式: " + ration / 1000000);

//转换成set方式
startTime = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
BySet(arr, target);
}
endTime = System.currentTimeMillis();
ration = endTime - startTime;
System.out.println("set方式: " + ration / 1000000);

//直接循环方式
startTime = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
ByForLoop(arr, target);
}
endTime = System.currentTimeMillis();
ration = endTime - startTime;
System.out.println("循环方式: " + ration / 1000000);

//二分法查找
startTime = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
ByArraysBinarySearch(arr, target);
}
endTime = System.currentTimeMillis();
ration = endTime - startTime;
System.out.println("二分法查找: " + ration / 1000000);
}
public static boolean ByList(String[] arr, String targetValue) {
return Arrays.asList(arr).contains(targetValue);
}
public static boolean BySet(String[] arr, String targetValue) {
Set<String> set = new HashSet<String>(Arrays.asList(arr));
return set.contains(targetValue);
}
public static boolean ByForLoop(String[] arr, String targetValue) {
for(String s: arr){
if(s.equals(targetValue))
return true;
}
return false;
}
public static boolean ByArraysBinarySearch(String[] arr, String targetValue) {
int a = Arrays.binarySearch(arr, targetValue);
if(a > 0)
return true;
else
return false;
}
}
运行结果如下:
list方式: 5
set方式: 22
循环方式: 2
二分法查找: 3
经过大量数据测试循环方式效率最高,其次是二分法,最后是list,和set因为因为将数组压入Collection类型中,首先要将数组元素遍历一遍,然后再使用集合类做其他操作。但是list方式明显要比set方式快很多,这是为什么呢?直接看代码:首先
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
返回的是ArrayList所以set方式还要进行一次操作将ArrayList转换成set,
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
之一addAll方法:
public boolean addAll(Collection<? extends E> c) {
boolean modified = false;
for (E e : c)
if (add(e))
modified = true;
return modified;
}
又一次进行了选环,所以效率比较低,binggo

热心网友 时间:2023-08-02 03:54

你想问啥?????
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
送你离开千里之外歌词完整版 枇杷怎么做才有营养? 枇杷怎么吃最有营养啊? 用护肤品脸上刺痛怎么办 洗脸脸上刺痛 肠粉有什么家常做法? 肠粉的家常做法 教你自制广东肠粉 小度voice是什么意思? 小度智能屏x10是否支持粤语_小度智能屏x10支持粤语吗 小度支持粤语吗 java中如何高效的判断数组中是否包含某个元素 java如何判断数组中是否包含某元素 Java中数组是否包含某些元素 苹果mac电脑到底要不要关机 怎样腌制咸鸭蛋用多少盐多长时间. 用白酒和盐做咸鸭蛋多久能吃 多久可以吃,咸鸭蛋的腌制时间表,咸鸭蛋怎么腌制 咸鸭腌制多久可以吃?该如何腌制咸鸭蛋? 企业运营部包含哪些部门 连锁经营经理的职能职责是什么 超市的运营主管主要工作职责是什么? 跪求:服装批发市场的经营管理制度,员工的岗位职责 物流公司物流经营部职能与岗位职责是什么? 房地产开发公司经营部的岗位职责是什么 公司市场经营部管理制度 经营部的工作职责有哪些? 营运部,市场部,销售部 有什么区别,各部门职责... 经营部岗位职责 市场运营部职责是什么 市场营销部岗位职责。 java怎么判断一个元素是否在数组中存在 java中,如何测试数组是否包含某个值 在JAVA中如何判断一个元素是否在数组中 java中怎么判断一个字符串数组中包含某个字符或字符串 java中如何高效判断数组中是否包含某个特定的值 java 怎么判断数组元素是否存在 JAVA判断字符串数组中是否包含某字符串元素 java判断字符串数组中是否存在某个值,arrays类有... 在java中怎么判断一个数组包含另一个数组 如何判断字符串数组是否包含字符串数组中的任意一... java中如何查找数组中某个元素 java中有没有判断一个元素是不是数组中的方法 java数组中判断是否有相同的元素 大家说苹果电脑不用关机吗 苹果电脑平时关机好还是休眠好? 2019版信息安全管理制度包括一个办法的实施细则 信息安全管理制度.. 电子数据信息安全管理制度 保险公司信息安全管理办法 怎么样保证企业信息安全?