可以使用如下的代碼:
開封網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)2013年開創(chuàng)至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
Arrays.asList(yourArray).contains(yourValue)
但這并不適用于基本數(shù)據(jù)類型的數(shù)組。
在Java8之后,你可以使用Stream來檢測int,double,long類型的數(shù)組是否包含某個數(shù)值。(分別用IntStream, DoubleStream和LongStream),例如:
int[] a = {1,2,3,4};
boolean contains = IntStream.of(a).anyMatch(x - x == 4);
對于數(shù)組的一些操作,你可以上秒秒學(xué)了解相關(guān)的知識。
java中知道數(shù)組中實際的元素個數(shù)的方法:
定義一個變量保存數(shù)組中的元素個數(shù),然后對數(shù)組進(jìn)行遍歷,當(dāng)數(shù)組元素不為空時,變量的值+1,否則不改變。
代碼為:int n = 0; //保存元素個數(shù)的變量for(int i = 0; i array.length; i++){if(null != array[i]) n++;}System.out.println(n);
直接上代碼:
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;//次數(shù)
//轉(zhuǎn)換成list方式
long startTime = System.currentTimeMillis();
for (int i = 0; i times; i++) {
ByList(arr, target);
}
long endTime = System.currentTimeMillis();
long duration = endTime - startTime;
System.out.println("list方式: " + duration / 1000000);
//轉(zhuǎn)換成set方式
startTime = System.currentTimeMillis();
for (int i = 0; i times; i++) {
BySet(arr, target);
}
endTime = System.currentTimeMillis();
duration = endTime - startTime;
System.out.println("set方式: " + duration / 1000000);
//直接循環(huán)方式
startTime = System.currentTimeMillis();
for (int i = 0; i times; i++) {
ByForLoop(arr, target);
}
endTime = System.currentTimeMillis();
duration = endTime - startTime;
System.out.println("循環(huán)方式: " + duration / 1000000);
//二分法查找
startTime = System.currentTimeMillis();
for (int i = 0; i times; i++) {
ByArraysBinarySearch(arr, target);
}
endTime = System.currentTimeMillis();
duration = endTime - startTime;
System.out.println("二分法查找: " + duration / 1000000);
}
public static boolean ByList(String[] arr, String targetValue) {
return Arrays.asList(arr).contains(targetValue);
}
public static boolean BySet(String[] arr, String targetValue) {
SetString set = new HashSetString(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;
}
}
運(yùn)行結(jié)果如下:
list方式: 5
set方式: 22
循環(huán)方式: 2
二分法查找: 3
經(jīng)過大量數(shù)據(jù)測試循環(huán)方式效率最高,其次是二分法,最后是list,和set因為因為將數(shù)組壓入Collection類型中,首先要將數(shù)組元素遍歷一遍,然后再使用集合類做其他操作。但是list方式明顯要比set方式快很多,這是為什么呢?直接看代碼:首先
@SafeVarargs
@SuppressWarnings("varargs")
public static T ListT asList(T... a) {
return new ArrayList(a);
}
返回的是ArrayList所以set方式還要進(jìn)行一次操作將ArrayList轉(zhuǎn)換成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;
}
又一次進(jìn)行了選環(huán),所以效率比較低,binggo
public class Arr {
public static void main(String[] args) {
int[] nums = {2,6,9,4,7,0,1,7,0,5,3};
int[] temp = new int[nums.length];//臨時數(shù)組
int len = 0;
for(int x :nums)
{
if(x != 0)
{
temp[len++]=x;
}
}
nums = new int[len];//len等于nums中大于0的個數(shù)
for(int i = 0;ilen;i++)
{
nums[i]=temp[i];
}
for(int m:nums){
System.out.println(m);
}
}
}
給你兩個解決方案
第一種:定義兩個boolean變量inA,inB,初始值均為false,然后遍歷數(shù)組A和B,如果輸入數(shù)值在A中有相等的值,那么inA=true,如果在B中有相等的值,則inB=true。最后判斷inA和inB的值就可以了,代碼如下:
import java.util.Scanner;
public class OperaArray {
public static void main(String[] args) {
int[] A={1,2,3,4,5};
int[] B={6,7,8,9,10};
Integer cin=Integer.valueOf(new Scanner(System.in).next());
boolean inA=false;
boolean inB=false;
for(int i=0;iA.length||iB.length;i++){
if(cin==A[i]){
inA=true;
}else if(cin==B[i]){
inB=true;
}
}
if(inA==true){
System.out.println(cin+"在A數(shù)組中");
}
if(inB==true){
System.out.println(cin+"在B數(shù)組中");
}
}
方案2:使用list的contains方法:先把數(shù)組轉(zhuǎn)化為列表
int[] A={1,2,3,4,5};
int[] B={6,7,8,9,10};
Integer cin=Integer.valueOf(new Scanner(System.in).next());
ListInteger list1=new ArrayListInteger();
ListInteger list2=new ArrayListInteger();
for(int i=0;iA.length;i++){
list1.add(Integer.valueOf(A[i]));
}
for(int i=0;iB.length;i++){
list2.add(Integer.valueOf(B[i]));
}
if(list1.contains(cin)){
System.out.println(cin+"在數(shù)組A中");
}else if(list2.contains(cin)){
System.out.println(cin+"在數(shù)組B中");
}else{
System.out.println(cin+"不存在于這兩個數(shù)組中");
}
}
}
equals方法是比較hashCode的值的,即比較在內(nèi)存中地址的值。
字符串比較特殊,內(nèi)容相同的的String在內(nèi)存中地址是一樣的。所以hashCode值是相同的。
而不同的數(shù)組對象的hashCode不同,所以得出你以上的結(jié)果。