Có thể thêm chuỗi vào đầu chuỗi String mà không cần lặp lại toàn bộ mảng hay không.Thêm chuỗi vào đầu mảng String
Trả lời
Cách duy nhất để làm điều này là để duy trì một vòng đệm. nghĩa là bạn có một bộ đếm ghi nhớ nơi bắt đầu và bạn di chuyển nó thay vì di chuyển tất cả các mục trong mảng. Điều này chỉ hoạt động bởi vì bạn xác định lại những gì "bắt đầu" có nghĩa là.
Xem nguồn cho ArrayDeque trong đó có ba lĩnh vực
86 /**
87 * The array in which the elements of the deque are stored.
88 * The capacity of the deque is the length of this array, which is
89 * always a power of two. The array is never allowed to become
90 * full, except transiently within an addX method where it is
91 * resized (see doubleCapacity) immediately upon becoming full,
92 * thus avoiding head and tail wrapping around to equal each
93 * other. We also guarantee that all array cells not holding
94 * deque elements are always null.
95 */
96 private transient E[] elements;
97
98 /**
99 * The index of the element at the head of the deque (which is the
100 * element that would be removed by remove() or pop()); or an
101 * arbitrary number equal to tail if the deque is empty.
102 */
103 private transient int head;
104
105 /**
106 * The index at which the next element would be added to the tail
107 * of the deque (via addLast(E), add(E), or push(E)).
108 */
109 private transient int tail;
Vì vậy, thêm vào khi bắt đầu làm việc như thế này
224 public void addFirst(E e) {
225 if (e == null)
226 throw new NullPointerException();
227 elements[head = (head - 1) & (elements.length - 1)] = e;
228 if (head == tail)
229 doubleCapacity();
230 }
312 /**
313 * @throws NoSuchElementException {@inheritDoc}
314 */
315 public E getFirst() {
316 E x = elements[head];
317 if (x == null)
318 throw new NoSuchElementException();
319 return x;
320 }
Lưu ý: nó di chuyển người đứng đầu chứ không phải là thay đổi tất cả các yếu tố xuống mảng .
Tôi rất tò mò. Bạn có thể làm điều đó với độ dài vòng không được gắn? Bạn có một số giả mã giả không? – Jerome
@Jerome Đã thêm mã từ ArrayDeque không được sửa. Nó tăng gấp đôi kích thước của mảng khi cần thiết. –
Bạn không thể ... Bạn phải di chuyển tất cả các chuỗi đến sau khi nó chuyển tiếp để chứa chuỗi mới. Nếu bạn trực tiếp thêm nó vào chỉ mục thứ 0, bạn sẽ mất phần tử trước đó tại đó
Để làm điều đó, bạn nên sử dụng List
.
Và nếu bạn muốn sử dụng đặc biệt là các mảng nội bộ, đi cho một ArrayList
Bạn không thể thực hiện getFirst (...), getLast (...), addFirst (...), addLast (...), removeFirst (.. .), hoặc removeLast (...) với một ArrayList. Nó không cung cấp các phương thức bổ sung để hoạt động dễ dàng trên các đầu của danh sách, vì LinkedList thực hiện –
@Sibi Tôi nghĩ bạn sẽ tìm thấy bạn có thể thêm (int index, E e) ... xem tại đây http://docs.oracle .com/javase/6/docs/api/java/util/List.html # add% 28int,% 20E% 29 – xagyg
@xagyg Tôi đồng ý – Jerome
thử
String[] a = {"1", "2"};
String[] a2 = new String[a.length + 1];
a2[0] = "0";
System.arraycopy(a, 0, a2, 1, a.length);
-1 Điều này tất nhiên sẽ lặp qua tất cả các phần tử trong mảng. –
String[] myArray= {"hi","hi2"};
List<String> temp = new ArrayList<String>(Arrays.asList(prova));
temp.add(0, "h3");
myArray = temp.toArray(new String[temp.size()]);
Thực ra giải pháp của bạn không hoạt động asis. Đây là lý do tại sao: http: // stackoverflow.com/a/2965808/1515058 Điều này sẽ hoạt động: Chuỗi [] myArray = {"hi", "hi2"}; Danh sách
tốt nhất tôi có thể quản lý ...
public static void main(String[] args) {
String[] s = new String[] { "a", "b", "c" };
System.out.println(Arrays.toString(prepend(s,"d")));
}
public static String[] prepend(String[] a, String el) {
String[] c = new String[a.length+1];
c[0] = el;
System.arraycopy(a, 0, c, 1, a.length);
return c;
}
@EvgeniyDorofeev Câu trả lời hay. Đánh tôi đi. – xagyg
Bạn có thể làm một số điều như dưới đây
public class Test {
public static String[] addFirst(String s[], String e) {
String[] temp = new String[s.length + 1];
temp[0] = e;
System.arraycopy(s, 0, temp, 1, s.length);
return temp;
}
public static void main(String[] args) {
String[] s = { "b", "c" };
s = addFirst(s, "a");
System.out.println(Arrays.toString(s));
}
}
này được khắc phục phiên bản của giải pháp đề xuất bởi @matteosilv:
String[] myArray= {"hi","hi2"};
List<String> list = new LinkedList<String>(Arrays.asList(myArray));
list.add(0, "h3");
myArray = list.toArray(new String[list.size()]);
Nếu bạn đã sử dụng ổi bạn có thể sử dụng ObjectArrays::concat
để làm điều này:
String[] args = ...;
ObjectArrays.concat("prepended", args);
- 1. thêm chuỗi Chuỗi mảng
- 2. Làm cách nào để thêm mục mới vào mảng Chuỗi?
- 3. PHP: Thêm chuỗi tiền tố vào giá trị mảng
- 4. cách thêm giá trị đầu vào vào một mảng
- 5. assign C# chuỗi các mảng hoặc string [] để javascript mảng
- 6. API Web ASP.net - Thêm Tên mảng vào Đầu ra
- 7. phụ thêm nhân vật mảng chuỗi C++
- 8. chuyển đổi một mảng FileInfo vào một String mảng C#
- 9. Chuyển đổi mảng chuỗi thành Danh sách <string>
- 10. C Mảng # - string [] [] vs string [,]
- 11. Nối chuỗi vào mảng Matlab
- 12. Thêm ký tự vào đầu và cuối của chuỗi
- 13. đối tượng vào mảng chuỗi
- 14. String với cấu trúc mảng Mảng
- 15. String để mảng byte
- 16. Thêm khoảng trắng vào chuỗi
- 17. Thêm phương thức Thêm vào mảng ActiveRecord
- 18. Làm thế nào để sao chép chuỗi mảng vào danh sách <string>?
- 19. LINQ - rẽ Danh sách <string> vào Dictionary <string, string>
- 20. Thêm chuỗi vào NSMutableString
- 21. Thêm phần tử vào đầu mảng mà không thay đổi các phím mảng khác
- 22. Các mảng đầu vào HTML
- 23. grep đầu ra vào mảng
- 24. Chia chuỗi vào danh sách <string> với LINQ
- 25. NumberFormatException cho chuỗi đầu vào
- 26. Làm thế nào để tạo mảng String động nếu chúng ta không biết số chuỗi trong đầu?
- 27. Jquery thêm css vào đầu
- 28. Thêm nhiều chuỗi vào một chuỗi
- 29. Thêm SortedList hoặc Dictionary <int, string> vào ResourceDictionary
- 30. Thêm chuỗi rỗng vào RadComboBox
Sử dụng một cấu trúc dữ liệu khác nhau phù hợp với nhu cầu của bạn (ví dụ 'ArrayList') sẽ tốt hơn. – Sulthan
Sử dụng ArrayUtils.add (T [] mảng, chỉ mục int, phần tử T) (https://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/ArrayUtils. html # add-T: A-int-T-) –