String array ( String[]) var ve ilk öğeyi kaldırmam gerekiyor. Bunu verimli bir şekilde nasıl yapabilirim?
String array ( String[]) var ve ilk öğeyi kaldırmam gerekiyor. Bunu verimli bir şekilde nasıl yapabilirim?
Yanıtlar:
Java'daki dizilerin boyutu değiştirilemez. Bu nedenle, teknik olarak diziden herhangi bir öğe kaldıramazsınız.
Diziden bir öğeyi kaldırmanın bir yolu, yeni, daha küçük bir dizi oluşturmak ve ardından tüm öğeleri orijinal diziden yeni, daha küçük diziye kopyalamaktır.
String[] yourArray = Arrays.copyOfRange(oldArr, 1, oldArr.length);
Ancak yukarıdaki yöntemi önermem. Gerçekten bir List<String>. Listeler, herhangi bir dizinden öğe eklemenizi ve kaldırmanızı sağlar. Bu, aşağıdakine benzer görünür:
List<String> list = new ArrayList<String>(); // or LinkedList<String>();
list.add("Stuff");
// add lots of stuff
list.remove(0); // removes the first item
ArrayListO (n) olduğuna dikkat etmek önemlidir .
ArrayList, ama için değil LinkedList.
Arrays.copyOfRange()API9 + içindir
En basit yol muhtemelen aşağıdaki gibidir - temelde bir eleman daha küçük olan yeni bir dizi oluşturmanız ve ardından tutmak istediğiniz öğeleri doğru konumlara kopyalamanız gerekir.
int n=oldArray.length-1;
String[] newArray=new String[n];
System.arraycopy(oldArray,1,newArray,0,n);
Kendinizi bu tür bir işlemi sık sık yaparken bulursanız, bunun aslında farklı türde bir veri yapısı, örneğin bağlantılı bir liste kullanmanız gerektiğinin bir işareti olabileceğini unutmayın. Her seferinde yeni bir dizi oluşturmak bir O (n) işlemidir ve diziniz büyükse pahalıya mal olabilir. Bağlantılı bir liste size ilk elemanın O (1) kaldırılmasını sağlayacaktır.
Alternatif bir fikir, ilk öğeyi hiç kaldırmak değil, sadece kullanımda olan ilk dizini işaret eden bir tamsayıyı artırmaktır. Dizinin kullanıcılarının bu farkı hesaba katması gerekecektir, ancak bu verimli bir yaklaşım olabilir. Java String sınıfı, alt dizeler oluştururken aslında bu yöntemi dahili olarak kullanır.
Arrays.copyOfRange()dır-dir.
Hızlıca bırakın, hiç yapamazsınız. Java'daki diziler sabit boyuttadır. Yapabileceğiniz iki şey:
System.arraycopyBunlardan herhangi biri için kullanabilirsiniz . Bunların ikisi de O (n) 'dir, çünkü 1 eleman hariç hepsini kopyaladılar.
İlk öğeyi sık sık kaldıracaksanız, LinkedListbunun yerine kullanmayı düşünün . Kolaylık sağlamak LinkedList.removeiçin Queuearayüzden olanı kullanabilirsiniz . İleLinkedList , ilk elemanın kaldırılması O (1) 'dir. Aslında, ListIteratoro konuma bir kez ulaştığınızda herhangi bir öğeyi kaldırmak O (1) 'dir . Bununla birlikte, indeksle rastgele bir elemana erişim O (n) 'dur.
Alternatif bir çirkin yöntem:
String[] a ={"BLAH00001","DIK-11","DIK-2","MAN5"};
String[] k=Arrays.toString(a).split(", ",2)[1].split("]")[0].split(", ");