描述如下比如一个List 里存了"A E B C D C E D" 那么将没有重复元素的A B放进一个HashMap里面
我的程序如下
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.sun.corba.se.impl.encoding.OSFCodeSetRegistry.Entry;public class TestList {
/**
* @param args
*/
public static void main(String[] args) {
String str="AEBCUCOEDOEDGFHGF";
List alist = new ArrayList();
for(int i=0;i<str.length();i++){
alist.add(str.charAt(i));
}
addListToMap(alist);
}
public static void addListToMap(List list){
int t=0;
Map map = new HashMap();
for(int i=0;i<list.size();i++){
if(map.containsValue(list.get(i))){//先判断从List取出的元素在Map里面是否存在,如果存在则找到删除
List keys = new ArrayList();
Iterator it=map.entrySet().iterator();
while(it.hasNext()){
java.util.Map.Entry ent=(java.util.Map.Entry)it.next();
Object obj = ent.getValue();
if(obj!=null&&obj.equals(list.get(i))){
keys.add(ent.getKey());
}
}
if(map!=null)
for(int s=0;s<keys.size();s++){
map.remove(keys.get(s));
}
continue;
}
else{//如果从List取出的元素在Map里没有,就放进去
t++;
map.put(new Integer(t), list.get(i));
}
}
for(Iterator it=map.keySet().iterator();it.hasNext();){//遍历Map打印输出
Object key=it.next();
Object value=map.get(key);
System.out.print(value+" ");
}
}
}
我的程序如下
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.sun.corba.se.impl.encoding.OSFCodeSetRegistry.Entry;public class TestList {
/**
* @param args
*/
public static void main(String[] args) {
String str="AEBCUCOEDOEDGFHGF";
List alist = new ArrayList();
for(int i=0;i<str.length();i++){
alist.add(str.charAt(i));
}
addListToMap(alist);
}
public static void addListToMap(List list){
int t=0;
Map map = new HashMap();
for(int i=0;i<list.size();i++){
if(map.containsValue(list.get(i))){//先判断从List取出的元素在Map里面是否存在,如果存在则找到删除
List keys = new ArrayList();
Iterator it=map.entrySet().iterator();
while(it.hasNext()){
java.util.Map.Entry ent=(java.util.Map.Entry)it.next();
Object obj = ent.getValue();
if(obj!=null&&obj.equals(list.get(i))){
keys.add(ent.getKey());
}
}
if(map!=null)
for(int s=0;s<keys.size();s++){
map.remove(keys.get(s));
}
continue;
}
else{//如果从List取出的元素在Map里没有,就放进去
t++;
map.put(new Integer(t), list.get(i));
}
}
for(Iterator it=map.keySet().iterator();it.hasNext();){//遍历Map打印输出
Object key=it.next();
Object value=map.get(key);
System.out.print(value+" ");
}
}
}
for(int s=0;s<keys.size();s++){
map.remove(keys.get(s));
}
这样试试看
public static void addListToMap(List list){
int t=0;
Map map = new HashMap();
List tmpList = new ArrayList(list);
List delList = new ArrayList();
for(int i=tmpList.size()-1;i>=0;i--){
Object o = tmpList.remove(i); //删除该元素
if (delList.contains(o) || //是否删除过
tmpList.contains(o)) { //是否删除后还有相同的
delList.add(o);
} else {
//map.put(new Integer(++t), o); //这样得到的结果是反过来的,即后面的元素key小
tmpList.add(o); //如果没有重复的再放回去
}
}
for (int i=0; i<tmpList.size(); i++) {
map.put(new Integer(++t), tmpList.get(i)); //这样得到的结果是不反的
} for(Iterator it=map.keySet().iterator();it.hasNext();){//遍历Map打印输出
Object key=it.next();
Object value=map.get(key);
System.out.print(value+" ");
}
}
Set<Character> result = new HashSet<Character>();
Map<Character,Integer> map = new HashMap<Character, Integer>();
for( int i = 0; i < str.length(); i++) {
Character curChar = Character.valueOf(str.charAt(i));
if(map.containsKey(curChar)) {
map.put(curChar,new Integer(map.get(curChar)+1));
result.remove(curChar);
}else {
map.put(curChar,new Integer(1));
result.add(curChar);
}
}
for (Character character : result) { System.out.print(character);
}
如果是通过String直接转为map的,还可以更短
String str="AEBCUCOEDOEDGFHGF";
int t=0;
Map map = new HashMap();
for(int i = 0; i < str.length(); i++) {
if (str.length()-1 != str.replaceAll(str.substring(i, i+1), "").length()) {
map.put(new Integer(++t), str.charAt(i));
}
}
str.replaceAll这个方法要从开始到结束扫描整个字符串,比较耗资源,str.substring对于取一个char来说,不如charAt,还有,这类题目的都是倾向于原始资源只读一个循环。
我就是有个疑问 为什么非要放进去个Integer 呢?
直接Map<Character,Character>还简单些 呵呵
用replaceAll只是针对你的代码长而改的,省代码就有可能会牺牲性能
另外,如果没有顺序要求,我最开始的那段代码,被注释掉的那句就可以了(前提是根据LZ最开始的要求传进一个list参数的),代码也不比你的长
Map map = new HashMap();
for(int i=0;i<list.size();i++){
if(map.containsKey(list.get(i))){
Iterator it=map.entrySet().iterator();
while(it.hasNext()){
java.util.Map.Entry ent=(java.util.Map.Entry)it.next();
Object o = ent.getKey();
if(o!=null&&o.equals(list.get(i))){
ent.setValue(1);
}
}
}
else map.put(list.get(i), 0);
}
Map hmap = new HashMap();
int ht=0;
for(Iterator it=map.keySet().iterator();it.hasNext();){//遍历Map打印输出
Object key=it.next();
Object value=map.get(key);
if(value.equals(0)){
ht++;
hmap.put(ht, key);
System.out.print(key+" ");
}
}
}不过还是不够简洁,大家继续讨论啊