Java递归实现全排列改进(二)---利用ArrayList实现去重

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

public class Test{

private static String[] s = new String[]{"a","b","a"};

private static int l = s.length;

private static List<String> list = new ArrayList<String>();

public static void main(String[] args) {

List<String> source = Arrays.asList(s);

List<String> target = new ArrayList<String>();

sort(source,target);

}

 private static void sort(List<String> source, List<String> target) {

if(target.size() == l){

if(!list.contains(target.toString())){

list.add(target.toString());

for(int i=0;i<target.size();i++){

System.out.print(target.get(i));

}

System.out.println();

}

}

for(int i=0;i<source.size();i++){

List<String> targetList = new ArrayList<String>(target);

targetList.add(source.get(i));

List<String> resourceList = new ArrayList<String>(source);

resourceList.remove(i);

sort(resourceList,targetList);

}

}

}

时间: 2024-08-10 19:12:54

Java递归实现全排列改进(二)---利用ArrayList实现去重的相关文章

Java递归实现全排列改进(一)---利用HashSet实现去重

import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; public class Test{ private static String[] s = new String[]{"a","b","a"};

java对象的内存布局(二):利用sun.misc.Unsafe获取类字段的偏移地址和读取字段的值

在上一篇文章中.我们列出了计算java对象大小的几个结论以及jol工具的使用,jol工具的源代码有兴趣的能够去看下.如今我们利用JDK中的sun.misc.Unsafe来计算下字段的偏移地址,一则验证下之前文章中的结论,再则跟jol输出结果对照下.怎样获取sun.misc.Unsafe对象.能够參考这篇文章. public class VO { public int a = 0; public long b = 0; public static String c= "123"; pub

java递归实现全排列

import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Test{ private static String[] s = new String[]{"1","2","3","4"}; private static int l = s.length; public static void main(Stri

Java 容器 & 泛型:二、ArrayList 、LinkedList和Vector比较

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 继续上一篇的容器文章认识容器,泥瓦匠慢慢带你们走进List的容器解说.今天泥瓦匠想说说 ArrayList .LinkedList和Vector比较. 一.List回顾 序列(List),有序的Collection,正如它的名字一样,是一个有序的元素列表.确切的讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 nu

(转载)Java 容器 &amp; 泛型:二、ArrayList 、LinkedList和Vector比较

继续上一篇的容器文章认识容器,泥瓦匠慢慢带你们走进List的容器解说.今天泥瓦匠想说说 ArrayList .LinkedList和Vector比较. 一.List回顾 序列(List),有序的Collection,正如它的名字一样,是一个有序的元素列表.确切的讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素.实现List的有:ArrayList.LinkedList.Vector.Stack等

Java集合源码学习笔记(二)ArrayList分析

Java集合源码学习笔记(二)ArrayList分析 >>关于ArrayList ArrayList直接继承AbstractList,实现了List. RandomAccess.Cloneable.Serializable接口,为什么叫"ArrayList",因为ArrayList内部是用一个数组存储元素值,相当于一个可变大小的数组,也就是动态数组. (1)继承和实现继承了AbstractList,实现了List:ArrayList是一个数组队列,提供了相关的添加.删除.修

Java集合源码分析(二)ArrayList

ArrayList简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的CopyOnWriteArrayList类. ArrayList实现了Serializable接口,因此它支持序列化,能够通过

原 Java学习之Xml系列二:xml按条件查询、xml递归遍历所有元素和属性

xml中加入了几条,为了方便查询时作为示例. 话不多说见代码注释: DTD文件:SwordTypeDefinition.dtd <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT SwordLibrary (Sword*)> <!ELEMENT Sword (SwordName,Price,Attack)> <!ELEMENT SwordName (#PCDATA)> &l

Java使用递归实现全排列的代码

将写内容过程经常用到的一些内容备份一下,下边内容是关于Java使用递归实现全排列的内容. public class AllPermutation { public static void main(String[] args) { char[] source=new char[]{'A','B','C'}; char[] result=new char[source.length]; allPermutation(0,source,result); } public static void al