Soru Öğenin listede olup olmadığını kontrol etmek için bir astar


Java / Python ile birlikte çalışıyorum. Şimdi bu durumda elemanın listede olup olmadığını kontrol etmek ve bir şeyler yapmak istiyorum ...

Python diyor ki:

if "a" in ["a", "b", "c"]:
    print "It's there!"

Java, ArrayList / Set veya benzeri veri yapısını adım adım oluşturmak ve ona eleman eklemek yerine, bunun için tek bir astar sağlar mı?

Teşekkürler


32
2018-01-25 20:27


Menşei




Cevaplar:


kullanım Arrays.asList:

if( Arrays.asList("a","b","c").contains("a") )

67
2018-01-25 20:29



Bu bir Liste oluşturmuyor mu? - danben
Liste sadece dizinin etrafındaki sarıcıdır, bu yüzden çok hafiftir. Tabii ki, "içerir" sadece dizi boyunca yinelenen sona erecek, bu yüzden ne anlamı var? - Paul Tomblin
@danben emin, ama uygun bir tek liner. - Mark Elliot
Tek bir astardır - ve koleksiyon türlerini manuel olarak oluşturmak zorunda değilsiniz. +1 benden :) - Andreas_D
evet, ve tek gömlekler için O (n) üzerinden O (log n) tekniklerinin kullanılmasının avantajı yoktur. Büyük bir kümeye dahil edilmeyi kontrol edecekseniz, almakta olduğunuz buysa HashSet kullanın. - Jason S


Liste arabiriminde bir boole (Object obj) yöntemi vardır.

Söyleyebilmeniz gerekir:

if (list.contains("a")) {
    System.out.println("It's there");
}

Göre javadoc:

boolean içerir (Object o)

Returns true if this list contains the specified element. More formally, returns true if and only if this list contains at least one element e such that (o==null ? e==null : o.equals(e)).

11
2018-01-25 20:33





JDK7'de:

if ({"a", "b", "c"}.contains("a")) {

Projenin Madeni Para koleksiyonları hazırlandığını farz edelim.


7
2018-01-25 20:53



Bu zamanla ilgili. Umarım bu benimsenir. Java'nın ayrıntılarından bıktım - I82Much
Fazladan 13 karakter muhtemelen seni öldürmeyecek. - Tom Hawtin - tackline


Herhangi bir öğede görünmeyen bir ayırıcı ile Dizeleri kullanmayı deneyebilirsiniz.

if ("|a|b|c|".contains("|a|"))

2
2018-01-25 20:44





Bir dizide bir öğe bulmak veya varlığını kontrol etmek için java.util.Arrays.binarySearch kullanabilirsiniz.

import java.util.Arrays;
...

char[] array = new char[] {'a', 'x', 'm'};
Arrays.sort(array); 
if (Arrays.binarySearch(array, 'm') >= 0) {
    System.out.println("Yes, m is there");
}

BinarySearch'ün doğru çalışması için dizinin sıralanması gerektiğini unutmayın. Bu nedenle, örnekte Arrays.sort () öğesine çağrı. Verileriniz zaten sıralanmışsa, bunu yapmanız gerekmez. Bu nedenle, önce dizininizi sıralamanız gerekiyorsa, kesinlikle bir tek liner değildir. Ne yazık ki, Arrays.sort () diziye bir başvuru döndürmez - bu nedenle sıralama ve binarySearch (yani Arrays.binarySearch (Arrays.sort (myArray), anahtar)) birleştirmek mümkün değildir)).

Ekstra ayırmayı karşılayabiliyorsanız, Arrays.asList () öğesini kullanarak daha temiz görünüyor.


1
2018-01-25 20:37





Eğer koleksiyonları olmayan bir astarı gerçekten istiyorsa, bir tane alabilir:

for(String s:new String[]{"a", "b", "c")) if (s.equals("a")) System.out.println("It's there");

*gülümseme*

(Bu çirkin değil mi? Lütfen, gerçek kodda kullanmayın)


0
2018-01-25 20:37