List<Integer> list = new ArrayList<Integer>(); Map<Integer,Integer> map = new HashMap<Integer,Integer>(); for(Integer i :list){ map.put(i, map.get(i)+1); }
不一定用Integer,可以改为任意object List list = new ArrayList(); // 里面是1,1,2,2,3,3,3,4,4 Map <Integer,Object> map = new HashMap<Integer,Object>(); for(Object i : list){ map.put(i, map.get(i)+1); }
顶?LZ要找出其中每个重复值的个数,放在Map中,然后呢?
不一定用Integer,可以改为任意object List list = new ArrayList(); // 里面是1,1,2,2,3,3,3,4,4 Map <Integer,Object> map = new HashMap<Integer,Object>(); for(Object i : list){ map.put(i, map.get(i)+1); }
package com.java.others;import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner;/** * 计算字符串的字符出现的次数 * @author lichaoever * */ public class getCount { List<String> list = new ArrayList<String>(); Scanner s = new Scanner(System.in); public getCount() { System.out.println("请输入字符:"); this.count(s.nextLine()); } private void count(String str) { char[] c = str.toCharArray(); for(char s : c) { list.add(String.valueOf(s)); } Collections.sort(list);
for(String s : list) { int begin = list.indexOf(s); int end = list.lastIndexOf(s);
System.out.println("字母'"+ s + "'有:"+(end - begin + 1)+"个"); } } public static void main(String[] args) { new getCount(); } }
循环,遍历,用Map统计结果。
List<Object> list = new ArrayList<Object>(); Map <Object,Integer> map = new HashMap <Object,Integer>(); for(Object o :list){ map.put(o, map.get(o)==null?1:map.get(o)+1); }
import java.util.ArrayList; import java.util.List;public class B { public static void main(String[] args) { List<Integer> list = initData(); int x = list.size(); while(list.size()!=0){ List<Integer> arr = list; Integer obj = list.get(0); List<Integer> l1 = new ArrayList<Integer>(); l1.add(obj); arr.removeAll(l1);
System.out.println(obj+"出现"+(x-arr.size())+"次"); x = arr.size(); } }
public static List<Integer> initData(){ List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(1); list.add(2); list.add(2); list.add(3); list.add(3); list.add(3); list.add(4); list.add(4); return list; }} 我这是把结果简单的输出,你也可以把结果存起来
import java.util.ArrayList; import java.util.List;public class B { public static void main(String[] args) { List<Integer> list = initData(); int x = list.size(); while(list.size()!=0){ List<Integer> arr = list; Integer obj = list.get(0); List<Integer> l1 = new ArrayList<Integer>(); l1.add(obj); arr.removeAll(l1);
System.out.println(obj+"出现"+(x-arr.size())+"次"); x = arr.size(); } }
public static List<Integer> initData(){ List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(1); list.add(2); list.add(2); list.add(3); list.add(3); list.add(3); list.add(4); list.add(4); return list; }} O(∩_∩)O哈哈~
List <Integer> list = new ArrayList <Integer>(); Map <Integer,Integer> map = new HashMap <Integer,Integer>(); for(Integer i :list){ map.put(i, map.get(i)+1); }
package com.java.others;import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner;/** * 计算字符串的字符出现的次数 * @author lichaoever * */ public class getCount { List<String> list = new ArrayList<String>(); Scanner s = new Scanner(System.in); public getCount() { System.out.println("请输入字符:"); this.count(s.nextLine()); } private void count(String str) { char[] c = str.toCharArray(); for(char s : c) { list.add(String.valueOf(s)); } Collections.sort(list);
for(String s : list) { int begin = list.indexOf(s); int end = list.lastIndexOf(s);
System.out.println("字母'"+ s + "'有:"+(end - begin + 1)+"个"); } } public static void main(String[] args) { new getCount(); } }
顶 22楼 map.get(i)要判断是否为空!
22楼的好。 测试了下。import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class CountValue { public static void main(String[] args) { List<Object> list = new ArrayList<Object>(); list.add(2); list.add(3); list.add(4); list.add(2); list.add(3); list.add(3); Map <Object,Integer> map = new HashMap <Object,Integer>(); for(Object o :list){ map.put(o, map.get(o)==null?1:map.get(o)+1); } for(Object i:map.keySet()){ System.out.println(i+"----->"+map.get(i)); } } }
用字符串替换然后加到字典中 然后遍历字典输出 static Dictionary <string, int> dic = new Dictionary <string,int >(); string s ="dsadadsadsadfkashjfsafkakflaskjfl"; int len = s.Length; while(len > 0) { string temp = s[0].ToString();
s = s.Replace(s[0].ToString(),""); dic.Add( temp,len - s.Length); len = s.Length; } foreach (KeyValuePair <string , int> pair in dic) { Console.WriteLine(pair.key+" "+pari.value); }
比如你已经知道list里的数就0-9之间,就建个数组,假设叫count[10]
然后,count[list里的数]++;
如果list里的数个数未知,也是这么个意思,就是麻烦点。
比如你已经知道list里的数就0-9之间,就建个数组,假设叫count[10]
然后,count[list里的数]++;
如果list里的数个数未知,也是这么个意思,就是麻烦点。
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(Integer i :list){
map.put(i, map.get(i)+1);
}
List list = new ArrayList(); // 里面是1,1,2,2,3,3,3,4,4
Map <Integer,Object> map = new HashMap<Integer,Object>();
for(Object i : list){
map.put(i, map.get(i)+1);
}
List list = new ArrayList(); // 里面是1,1,2,2,3,3,3,4,4
Map <Integer,Object> map = new HashMap<Integer,Object>();
for(Object i : list){
map.put(i, map.get(i)+1);
}
import java.util.Collections;
import java.util.List;
import java.util.Scanner;/**
* 计算字符串的字符出现的次数
* @author lichaoever
*
*/
public class getCount { List<String> list = new ArrayList<String>();
Scanner s = new Scanner(System.in);
public getCount() {
System.out.println("请输入字符:");
this.count(s.nextLine());
}
private void count(String str)
{
char[] c = str.toCharArray();
for(char s : c)
{
list.add(String.valueOf(s));
}
Collections.sort(list);
for(String s : list)
{
int begin = list.indexOf(s);
int end = list.lastIndexOf(s);
System.out.println("字母'"+ s + "'有:"+(end - begin + 1)+"个");
}
}
public static void main(String[] args) {
new getCount();
}
}
Map <Object,Integer> map = new HashMap <Object,Integer>();
for(Object o :list){
map.put(o, map.get(o)==null?1:map.get(o)+1);
}
import java.util.ArrayList;
import java.util.List;public class B { public static void main(String[] args) {
List<Integer> list = initData();
int x = list.size();
while(list.size()!=0){
List<Integer> arr = list;
Integer obj = list.get(0);
List<Integer> l1 = new ArrayList<Integer>();
l1.add(obj);
arr.removeAll(l1);
System.out.println(obj+"出现"+(x-arr.size())+"次");
x = arr.size();
}
}
public static List<Integer> initData(){
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(1);
list.add(2);
list.add(2);
list.add(3);
list.add(3);
list.add(3);
list.add(4);
list.add(4);
return list;
}}
我这是把结果简单的输出,你也可以把结果存起来
这样是不行的...其实, 当这个list比较松散的时候, 比如1000000长度的list中存放的元素只有一个元素出现了两次, 你的map中比较拿到数量最多的那组又变成了一个很繁琐的问题.
这个方法不错, 然而indexOf的效率是多少呢???其实String中的一些操作效率都是比较低的, 可以考虑用正则.
前一个对应键,后一个对应出现次数举个例子: Map<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int num:arr){
if(map.containsKey(num)){
int count=map.get(num)+1;
map.put(num, count);
}
else{
map.put(num, 1);
}
}
你也没看到 Collections.sort(list); 这个吗, 已经排序了。 怎么可能会是没有规律
for(int i=0;i<list.size()-1;i++){
List list2=new ArrayList();
for(int j=list.size()-1;j>i;j--){
if(list.get(j).equals(list.get(i))){
list2.add(list.get(j));
list.remove(j);
}
}
System.out.println(list2.get(0)+"元素重复个数为: "+(list2.size()+1)+"个");
}
import java.util.List;public class B { public static void main(String[] args) {
List<Integer> list = initData();
int x = list.size();
while(list.size()!=0){
List<Integer> arr = list;
Integer obj = list.get(0);
List<Integer> l1 = new ArrayList<Integer>();
l1.add(obj);
arr.removeAll(l1);
System.out.println(obj+"出现"+(x-arr.size())+"次");
x = arr.size();
}
}
public static List<Integer> initData(){
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(1);
list.add(2);
list.add(2);
list.add(3);
list.add(3);
list.add(3);
list.add(4);
list.add(4);
return list;
}}
O(∩_∩)O哈哈~
Map <Integer,Integer> map = new HashMap <Integer,Integer>();
for(Integer i :list){
map.put(i, map.get(i)+1);
}
import java.util.Collections;
import java.util.List;
import java.util.Scanner;/**
* 计算字符串的字符出现的次数
* @author lichaoever
*
*/
public class getCount { List<String> list = new ArrayList<String>();
Scanner s = new Scanner(System.in);
public getCount() {
System.out.println("请输入字符:");
this.count(s.nextLine());
}
private void count(String str)
{
char[] c = str.toCharArray();
for(char s : c)
{
list.add(String.valueOf(s));
}
Collections.sort(list);
for(String s : list)
{
int begin = list.indexOf(s);
int end = list.lastIndexOf(s);
System.out.println("字母'"+ s + "'有:"+(end - begin + 1)+"个");
}
}
public static void main(String[] args) {
new getCount();
}
}
测试了下。import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CountValue {
public static void main(String[] args) {
List<Object> list = new ArrayList<Object>();
list.add(2);
list.add(3);
list.add(4);
list.add(2);
list.add(3);
list.add(3);
Map <Object,Integer> map = new HashMap <Object,Integer>();
for(Object o :list){
map.put(o, map.get(o)==null?1:map.get(o)+1);
}
for(Object i:map.keySet()){
System.out.println(i+"----->"+map.get(i));
}
}
}
string s ="dsadadsadsadfkashjfsafkakflaskjfl"; int len = s.Length;
while(len > 0)
{
string temp = s[0].ToString();
s = s.Replace(s[0].ToString(),""); dic.Add( temp,len - s.Length);
len = s.Length;
}
foreach (KeyValuePair <string , int> pair in dic)
{
Console.WriteLine(pair.key+" "+pari.value);
}
用Map实现计数是最快,也是最有效的方式。
1、当list.size>0时,每次都取obj = list.get(0);
2、list.removeAll(Collection<obj>);
3、把remove之前的size与之后的size相减,得到obj出现的次数。没有测试过这样效率如何,感兴趣的可以试一下!
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class FindMaxTimes { public static void main( String[] args ) {
System.out.println( search( list().toArray() ).toString() );
} public static Map<Object, Integer> search( Object[] strs ) {
Map<Object, Integer> results = new HashMap<Object, Integer>();
for ( Object str : strs ) {
if ( !results.containsKey( str ) ) {
results.put( str, 1 );
} else {
results.put( str, results.get( str ) + 1 );
}
}
int maxTimes = 0;
for ( Map.Entry<Object, Integer> entry : results.entrySet() ) {
if ( entry.getValue() >= maxTimes ) {
maxTimes = entry.getValue();
} else {
results.put( entry.getKey(), 0 );
}
}
return results;
} public static List<Integer> list() {
List<Integer> list = new ArrayList<Integer>();
list.add( 5 );
list.add( 5 );
list.add( 8 );
list.add( 5 );
return list;
}
}输入结果:{8=1, 5=3}
int[] arr = list.toArray
public static int[] countsArr(int[] arr){
int[] counts = new int[10];
for(int i=0;i<arr.length;i++){
counts[arr[i] - 0]++;
}
return counts;
}我大致写了一个方法不知道可行不~~~~~~
这个最少遍历一遍
最差比较次数为o(n^2)
空间使用量最大为list中元素个数.
支持的顶下, 不同见解, 请分析, 谢谢
string listToString = "", result = "";
foreach (var item in list)
{
listToString += item;
} while (listToString.Length > 0)
{
string target = listToString[0].ToString();
int i = listToString.Length;
listToString = listToString.Replace(target,"");
result += target + ":有" + (i - listToString.Length) + "个。\r\n";
}
MessageBox.Show(result);
import java.util.List;import org.apache.commons.collections.Bag;
import org.apache.commons.collections.bag.TreeBag;/**
* @author houyinming
*
*/
public class ApplicationRunner
{ /**
* @param args
*/
public static void main( String[] args )
{
List < Integer > list = new ArrayList < Integer >();
Bag bag = new TreeBag( list );
Object[] values = bag.uniqueSet().toArray();
for( int i = 0 , count = values.length ; i < count ; i++ )
{
System.out.println( values[i] + "在List中存在" + bag.getCount( values[i] ) + "个" );
}
}
}
public class Test2{
public static void main(String [] args) {
List<Integer> myList=Arrays.asList(1,1,2,2,3,3,3,4,4);
HashSet<Integer> hs=new HashSet<Integer>(myList);
for(Integer i:hs){
System.out.println(i+" 在List中存在" + Collections.frequency(myList,i) + "个");
}
}
}
和92楼的比比.