⑴ java同集合中怎樣比較相鄰兩個元素 例如:集合a有1,5,7,9 2,4,5,9 ,2,3,5
關於這個問題很簡單,只需要一個循環遍歷就行,假如有n個元素,就會有n-1個結果啊,將相鄰的兩個數挨個比較,就是將一個數組(集合)挨個循環遍歷一遍就好了,然後把這結果用-1,0,1表示,用數組裝起來,就ok了。
代碼如下:
⑵ java 深度優先搜索(回溯法)求集合的冪集
import java.util.ArrayList;
import java.util.List;
public class BackTrack {
public static void main(String[] args) {
//初始化一個集合,放在list裡面
List<String> list=new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("f");
List<String> li=new ArrayList<String>();
PowerSet(0,list,li);
}
//回溯法求冪集
public static void PowerSet(int i,List<String> list,List<String> li){
if(i>list.size()-1){System.out.println(li);}
else{
li.add(list.get(i));//左加
PowerSet(i+1,list,li); //遞歸方法
li.remove(list.get(i)); //右去
PowerSet(i+1, list, li);
}
}
}
註:該方法採用中序遍歷二叉樹(實際這棵樹是不存在的)。對於第一個元素,左節點加進去,右節點去掉。對於第i一個節點,左加,右去。直到i大於元素的總個數。
輸出結果:
[1, 2, 3, 4]
[1, 2, 3]
[1, 2, 4]
[1, 2]
[1, 3, 4]
[1, 3]
[1, 4]
[1]
[2, 3, 4]
[2, 3]
[2, 4]
[2]
[3, 4]
[3]
[4]
[]
⑶ java演算法問題 排列組合 給定一組字元串,產生所有可能的集合
這是我寫的一個取組合的方法:
package Combination.c3;
import java.util.ArrayList;
import java.util.List;
public class Combinations {
/*
* 設有n個元素,組合數量有2的n次方種。
* 對 0 到 2的n次方-1 中的每個數,考察其二進制位形式,位數為1代表相應元素加入
* 到組合,0則不加入該元素至組合。
*
* 取組合方法
* 參數: list ---- 原始數組
* 返回: 包含所有組合數組的數組
*/
public static List<List<Object>> getCombinations(List<Object> list) {
List<List<Object>> result = new ArrayList<List<Object>>();
long n = (long)Math.pow(2,list.size());
List<Object> combine;
for (long l=0L; l<n; l++) {
combine = new ArrayList<Object>();
for (int i=0; i<list.size(); i++) {
if ((l>>>i&1) == 1)
combine.add(list.get(i));
}
result.add(combine);
}
return result;
}
//測試
public static void main(String[] args) {
ArrayList<Object> list = new ArrayList<Object>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
list.add("g");
list.add("h");
list.add("i");
list.add("j");
List<List<Object>> result = getCombinations(list);
System.out.println(list.toString());
System.out.println(result.toString());
}
}
⑷ java面試題及答案整理-Java集合list中裝了上百萬數據太耗內存,可以如何優化
在實際的Java編程中,List是我們經常使用的集合類型之一。面對大量數據存儲需求,正確優化內存使用至關重要。當List中裝入上百萬數據時,內存浪費問題凸顯。本文深度解析優化List內存使用方法,旨在避免資源浪費,提升程序性能。
首先,進行問題分析:List自動擴容機制在大量數據添加時頻繁觸發,每次擴容均需復制舊數據,導致內存消耗顯著。因此,了解內存使用情況,合理預估數據量,創建List時指定初始容量,可有效減少內存浪費。
解決方案包括以下四點:預估數據量、使用LinkedList、分批添加元素及運用Stream API。
預估數據量:提前預測List容量大小,創建時指定初始容量,避免頻繁擴容。
使用LinkedList:相比於ArrayList,LinkedList在添加或刪除元素時,無需復制數據,性能更優。
分批添加元素:將大容量數據分批添加,減少List擴容頻率,優化內存使用。
Stream API應用:利用Java 8引入的Stream API,減少創建新集合對象,避免內存浪費。
綜上,合理預估數據量、選擇合適的數據結構、分批添加元素及高效利用Stream API,是優化List內存使用的關鍵。在實際開發中,應綜合考量,靈活選擇優化策略,以實現更好的性能與更低的內存佔用。
⑸ 用java編寫程序,求集合的並集、交集和差集
publicstaticvoidmain(String[]args){
Integer[]A={1,2,3,4};
Integer[]B={1,3,7,9,11};
List<Integer>listA=Arrays.asList(A);
List<Integer>listB=Arrays.asList(B);
List<Integer>jiaoji=newArrayList<Integer>();
for(Integera:listA){
if(listB.contains(a)){
jiaoji.add(a);
}
}
System.out.println(jiaoji);
List<Integer>bingji=newArrayList<Integer>();
for(Integera:listA){
if(!bingji.contains(a)){
bingji.add(a);
}
}
for(Integerb:listB){
if(!bingji.contains(b)){
bingji.add(b);
}
}
System.out.println(bingji);
List<Integer>chaji=newArrayList<Integer>();
for(Integera:listA){
if(!listB.contains(a)){
chaji.add(a);
}
}
System.out.println(chaji);
}