使用不同方法查詢陣列中某個特定值(物件),並計算時間(個人練習)
設計了幾種遍歷方式,來看那種最快,先來看結果,後面附有實現方式,後續寫程式碼可根據需求選擇哪種方式
陣列長度小於1000時,使用自定義Loop最快; 陣列長度很大時,使用Arrays.binarySearch()速度最快.
第一種陣列長度10000, 總評價:Arrays.binarySearch()速度最快,其次是自定義Loop(不穩定),List速度不如Set
執行第一次:
使用Loop查詢花費的時間為183040使用Arrays.binarySearch()查詢花費的時間為36693
使用UseList查詢花費的時間為187733
使用UseSet查詢花費的時間為150187
執行第二次:
使用Loop查詢花費的時間為93013
使用Arrays.binarySearch()查詢花費的時間為35840
使用UseList查詢花費的時間為283307
使用UseSet查詢花費的時間為272640
第二種陣列長度1000000,總評價:Arrays.binarySearch()速度最快,Loop最慢,List速度不如Set
執行第一次;
使用Loop查詢花費的時間為4436905
使用Arrays.binarySearch()查詢花費的時間為33707
使用UseList查詢花費的時間為193280
使用UseSet查詢花費的時間為149760
執行第二次:
使用Loop查詢花費的時間為4009812
使用Arrays.binarySearch()查詢花費的時間為34133
使用UseList查詢花費的時間為185600
使用UseSet查詢花費的時間為144640
第三種陣列長度1000, 總評價: Loop最快,其次是Arrays.binarySearch(); List速度不如Set
執行第一次:
使用Loop查詢花費的時間為20907
使用Arrays.binarySearch()查詢花費的時間為49494
使用UseList查詢花費的時間為200533
使用UseSet查詢花費的時間為247040
執行第二次:
使用Loop查詢花費的時間為27734
使用Arrays.binarySearch()查詢花費的時間為53334
使用UseList查詢花費的時間為303360
使用UseSet查詢花費的時間為269227
附上測試程式碼:
package test1;
//在陣列中查詢某個特定值,如何查詢最快?測試看看。。
//如何在陣列中找出某個特定值,並計算執行時間
public class TestQuery1 {
public static void main(String[] args) {
//定義一個含有10000個數字的陣列
int[] arr = new int[1000];
for(int i = 0; i < arr.length; i++){
arr[i] = (int) (Math.random()*1000);
}
//假設查詢數字666
int targetValue = 666;
//使用Loop查詢時間
UseLoop useLoop = new UseLoop(arr, targetValue);
useLoop.spendTime("Loop");
//使用Arrays.binarySearch()方法查詢
UseArraysBinary useAB = new UseArraysBinary(arr, targetValue);
useAB.spendTime("Arrays.binarySearch()");
//使用集合List查詢
UseList useList = new UseList(arr, targetValue);
useList.spendTime("UseList");
//使用集合set查詢
UseSet useSet = new UseSet(arr, targetValue);
useSet.spendTime("UseSet");
}
}
Spend Time抽象類,計算花費時間:
package test1;
public abstract class SpendTime {
protected int[] arr;
protected int targetValue;
public abstract int search();
public void spendTime(String name){
long start = System.nanoTime();
search();
long end = System.nanoTime();
long time = end - start;
System.out.println("使用"+name+"查詢花費的時間為"+time);
}
}
使用Loop:
package test1;
public class UseLoop extends SpendTime{
//使用Loop查詢陣列是否包含某個值
public UseLoop(int[] arr, int targetValue){
this.arr = arr;
this.targetValue = targetValue;
}
public int search() {
for(int i =0; i < arr.length; i++){
if (arr[i]== targetValue){
return i;
}
}
return -1;
}
}
使用Arrays.binarySearch()
package test1;
import java.util.Arrays;
public class UseArraysBinary extends SpendTime{
public UseArraysBinary(int[] arr, int targetValue){
this.arr = arr;
this.targetValue = targetValue;
}
//使用Arrays.binarySearch查詢陣列中是否含有特定值
@Override
public int search() {
return Arrays.binarySearch(arr, targetValue);
}
}
使用List
package test1;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class UseList extends SpendTime{
public UseList(int[] arr, int targetValue){
this.arr = arr;
this.targetValue = targetValue;
}
@Override
public int search() {
List list = Arrays.asList(arr);
if(list.contains(targetValue))
return 1;
return -1;
}
}
使用Set
package test1;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class UseSet extends SpendTime{
public UseSet(int[] arr, int targetValue){
this.arr = arr;
this.targetValue = targetValue;
}
@Override
public int search() {
Set set = new HashSet(Arrays.asList(arr));
if(set.contains(targetValue))
return 1;
return -1;
}
}
相關文章
- 使用不同方法查詢陣列中某個特定值,並計算時間(改正二分法查詢錯誤和陣列轉化集合錯誤)陣列
- 查詢某個欄位的不同值
- MySQL查詢某個列中相同值的數量統計MySql
- Js陣列物件的屬性值升序排序,並指定陣列中的某個物件移動到陣列的最前面JS陣列物件排序
- 陣列中查詢給定值陣列
- vue 中 watch如何監聽陣列或物件中的某個值?Vue陣列物件
- js 取陣列中某個物件的集合JS陣列物件
- mongodb查詢資料庫中某個欄位中的值包含某個字串的方法MongoDB資料庫字串
- 查詢某個表最後修改時間
- 陣列物件按物件某個屬性排序陣列物件排序
- 查詢某時間段的統計資料
- 01:查詢特定的值
- 每日一練(24):在排序陣列中查詢數字排序陣列
- 查詢構造器結果--物件陣列互轉方法物件陣列
- js查詢指定的陣列中是否含有指定的值JS陣列
- 判斷某個陣列在不在物件裡陣列物件
- 面試演算法:lg(k)時間查詢兩個排序陣列合並後第k小的元素面試演算法排序陣列
- JS 兩組陣列取不同值組成新陣列的方法JS陣列
- 陣列使用find查詢用法陣列
- 查詢固定條數的某個值之和
- iOS 用簡便的方法統計兩個陣列中不同的元素iOS陣列
- 二維陣列按照其內層陣列的某個鍵值排序陣列排序
- 二維陣列中的查詢陣列
- java8 對list集合中的物件遍歷,重新賦值兩種方法,遍歷某個屬性返回陣列Java物件賦值陣列
- Linux 某個目錄下查詢檔案大小並排序(du),特定檔案刪除(find)Linux排序
- 演算法學習-查詢旋轉陣列的最小值演算法陣列
- `newtonsoft.json` 指定某個屬性使用特定的時間格式JSON
- Python中查詢字串某個字元最常用的方法!Python字串字元
- 2024-03-29 js練習之陣列物件轉換成鍵值對物件JS陣列物件
- Java中查詢陣列多數元素的4種方法Java陣列
- 【樹狀陣列 區間更新區間查詢】code陣列
- 在靜態類中定義一個泛型方法查詢陣列元素泛型陣列
- 編寫類A01,定義方法max,實現求某個double陣列的最大值,並返回陣列
- [譯] Swift 演算法學院 - 查詢陣列中第 K 大值Swift演算法陣列
- 在modelsim中查詢指定訊號是否有特定值
- js陣列操作——物件陣列根據某個相同的欄位分組JS陣列物件
- PHP 多維陣列排序-按某個 key 的值PHP陣列排序
- MySQL 合併查詢join 查詢出的不同列合併到一個表中MySql