⑴ 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);
}