私は整数の配列リストを持っています..
ArrayList <Integer> portList = new ArrayList();
特定の整数がすでに 2 回入力されているかどうかを確認する必要があります。これはJavaで可能ですか?
次のようなものを使用して、特定の値が何回存在するかを確認できます。
System.out.println(Collections.frequency(portList, 1));
// there can be whatever Integer, i put 1 so you can understand
特定の値が複数回存在するかどうかを確認するには、次のようなものを使用できます。
if ( (Collections.frequency(portList, x)) > 1 ){
System.out.println(x + " is in portList more than once ");
}
古い質問だと思いますが、ここで答えを探していたので、解決策を共有したいと思いました
public static boolean moreThanOnce(ArrayList<Integer> list, int searched)
{
int numCount = 0;
for (int thisNum : list) {
if (thisNum == searched) numCount++;
}
return numCount > 1;
}
これにより、少なくとも 2 つの同じ値がArrayList
int first = portList.indexOf(someIntValue);
int last = portList.lastIndexOf(someIntValue);
if (first != -1 && first != last) {
// someIntValue exists more than once in the list (not sure how many times though)
}
**編集**
特定の値の重複がいくつあるかを本当に知りたい場合は、配列全体を反復処理する必要があります。このようなもの :
/**
* Will return a list of all indexes where the given value
* exists in the given array. The list will be empty if the
* given value does not exist at all.
*
* @param List<E> list
* @param E value
* @return List<Integer> a list of indexes in the list
*/
public <E> List<Integer> collectFrequency(List<E> list, E value) {
ArrayList<Integer> freqIndex = new ArrayList<Integer>();
E item;
for (int i=0, len=list.size(); i<len; i++) {
item = list.get(i);
if ((item == value) || (null != item && item.equals(value))) {
freqIndex.add(i);
}
}
return freqIndex;
}
if (!collectFrequency(portList, someIntValue).size() > 1) {
// duplicate value
}
または単に
if (Collections.frequency(portList, someIntValue) > 1) {
// duplicate value
}
1 つの方法でこれを行う場合は、いいえ。ただし、リストに少なくとも複数回存在することを簡単に見つける必要がある場合は、2 つのステップで行うことができます。あなたができる
int first = list.indexOf(object)
int second = list.lastIndexOf(object)
//Don't forget to also check to see if either are -1, the value does not exist at all.
if (first == second) {
// No Duplicates of object appear in the list
} else {
// Duplicate exists
}
Set portSet = new HashSet<Integer>();
portSet.addAll(portList);
boolean listContainsDuplicates = portSet.size() != portList.size();
ここで私の解決策(Kotlinで)
// getItemsMoreThan(list, 2) -> [4.45, 333.45, 1.1, 4.45, 333.45, 2.05, 4.45, 333.45, 2.05, 4.45] -> {4.45=4, 333.45=3}
// getItemsMoreThan(list, 1)-> [4.45, 333.45, 1.1, 4.45, 333.45, 2.05, 4.45, 333.45, 2.05, 4.45] -> {4.45=4, 333.45=3, 2.05=2}
fun getItemsMoreThan(list: List<Any>, moreThan: Int): Map<Any, Int> {
val mapNumbersByElement: Map<Any, Int> = getHowOftenItemsInList(list)
val findItem = mapNumbersByElement.filter { it.value > moreThan }
return findItem
}
// Return(map) how often an items is list.
// E.g.: [16.44, 200.00, 200.00, 33.33, 200.00, 0.00] -> {16.44=1, 200.00=3, 33.33=1, 0.00=1}
fun getHowOftenItemsInList(list: List<Any>): Map<Any, Int> {
val mapNumbersByItem = list.groupingBy { it }.eachCount()
return mapNumbersByItem
}
質問を見て、値がArrayList に2 回存在するかどうかを調べる必要があります。したがって、以下の簡単なチェックを行うことで、「値が 2 回しか存在しないかどうかをチェックするためだけにリスト全体を調べる」というオーバーヘッドを削減できると思います。
public boolean moreThanOneMatch(int number, ArrayList<Integer> list) {
int count = 0;
for (int num : list) {
if (num == number) {
count ++ ;
if (count == 2) {
return true;
}
}
}
return false;
}