উত্তর:
অ্যারের আকার পরিবর্তন করা যায় না can't আপনি যদি আরও বড় অ্যারে চান তবে আপনাকে একটি নতুন ইনস্ট্যান্ট করতে হবে।
একটি ভাল সমাধান ArrayList
হ'ল এটির প্রয়োজন মতো বাড়তে পারে যা ব্যবহার করতে পারে। ArrayList.toArray( T[] a )
আপনার যদি এই ফর্মের প্রয়োজন হয় তবে পদ্ধতিটি আপনাকে আপনার অ্যারে ফিরিয়ে দেয়।
List<String> where = new ArrayList<String>();
where.add( ContactsContract.Contacts.HAS_PHONE_NUMBER+"=1" );
where.add( ContactsContract.Contacts.IN_VISIBLE_GROUP+"=1" );
আপনার যদি এটিকে একটি সাধারণ অ্যারেতে রূপান্তর করা দরকার ...
String[] simpleArray = new String[ where.size() ];
where.toArray( simpleArray );
তবে আপনি অ্যারে দিয়ে বেশিরভাগ জিনিসগুলি আপনি এই অ্যারেলিস্টের সাথেও করতে পারেন:
// iterate over the array
for( String oneItem : where ) {
...
}
// get specific items
where.get( 1 );
List<String>
যেমন একটি ব্যবহার করুন ArrayList<String>
। এটি অ্যারেগুলির থেকে পৃথকভাবে গতিশীলভাবে বিকাশযোগ্য (দেখুন: কার্যকর জাভা 2 য় সংস্করণ, আইটেম 25: তালিকাতে অ্যারেগুলিতে পছন্দ করুন )।
import java.util.*;
//....
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
System.out.println(list); // prints "[1, 2, 3]"
আপনি যদি অ্যারেগুলি ব্যবহারের java.util.Arrays.copyOf
জন্য জোর দিয়ে থাকেন তবে অতিরিক্ত উপাদানকে সংযোজন করতে আপনি বড় অ্যারে বরাদ্দ করতে ব্যবহার করতে পারেন । যদিও এটি সর্বোত্তম সমাধান নয়।
static <T> T[] append(T[] arr, T element) {
final int N = arr.length;
arr = Arrays.copyOf(arr, N + 1);
arr[N] = element;
return arr;
}
String[] arr = { "1", "2", "3" };
System.out.println(Arrays.toString(arr)); // prints "[1, 2, 3]"
arr = append(arr, "4");
System.out.println(Arrays.toString(arr)); // prints "[1, 2, 3, 4]"
এটি O(N)
প্রতি append
। ArrayList
অন্যদিকে, O(1)
অপারেশন অনুসারে ব্যয় মোতাবিভক্ত হয়েছে ।
ArrayList
অভ্যন্তরীণভাবে কি করে।
অ্যাপাচি কমন্স ল্যাং আছে
T[] t = ArrayUtils.add( initialArray, newitem );
এটি একটি নতুন অ্যারে প্রদান করে, তবে যদি আপনি সত্যিই কোনও কারণে অ্যারে নিয়ে কাজ করছেন তবে এটি করার এটি আদর্শ উপায়।
এখানে অন্য বিকল্প রয়েছে যা আমি এখানে দেখিনি এবং এতে "জটিল" অবজেক্টস বা সংগ্রহগুলি জড়িত নয়।
String[] array1 = new String[]{"one", "two"};
String[] array2 = new String[]{"three"};
String[] array = new String[array1.length + array2.length];
System.arraycopy(array1, 0, array, 0, array1.length);
System.arraycopy(array2, 0, array, array1.length, array2.length);
append()
অ্যারেতে কোনও পদ্ধতি নেই । পরিবর্তে ইতিমধ্যে প্রস্তাবিত একটি তালিকার অবজেক্টটি উপাদানকে যেমন গতিশীলভাবে সন্নিবেশ করানোর প্রয়োজনের পরিবেশন করতে পারে
List<String> where = new ArrayList<String>();
where.add(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1");
where.add(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1");
বা আপনি যদি সত্যিই কোনও অ্যারে ব্যবহার করতে আগ্রহী হন:
String[] where = new String[]{
ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1",
ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1"
};
তবে তারপরে এটি একটি নির্দিষ্ট আকার এবং কোনও উপাদান যুক্ত করা যায় না।
যেমন টাংগেনস বলেছেন, একটি অ্যারের আকার স্থির করা আছে। তবে আপনাকে প্রথমে এটি ইনস্ট্যান্ট করতে হবে, অন্যথায় এটি কেবল নাল রেফারেন্স হবে।
String[] where = new String[10];
এই অ্যারেতে কেবলমাত্র 10 টি উপাদান থাকতে পারে। সুতরাং আপনি কেবল 10 বার একটি মূল্য সংযোজন করতে পারেন। আপনার কোডে আপনি একটি নাল রেফারেন্স অ্যাক্সেস করছেন। এ কারণেই এটি কাজ করে না। গতিশীলভাবে ক্রমবর্ধমান সংগ্রহের জন্য, অ্যারেলিস্টটি ব্যবহার করুন।
আপনি যদি এই জাতীয় উপায়ে আপনার ডেটা সঞ্চয় করতে চান
String[] where = new String[10];
এবং আপনি সংখ্যার মতো এর সাথে কিছু উপাদান যুক্ত করতে চান আমাদের দয়া করে স্ট্রিংবিল্ডার যা সংক্ষিপ্তকরণের স্ট্রিংয়ের চেয়ে অনেক বেশি দক্ষ।
StringBuilder phoneNumber = new StringBuilder();
phoneNumber.append("1");
phoneNumber.append("2");
where[0] = phoneNumber.toString();
আপনার স্ট্রিংটি তৈরি করতে এবং এটি আপনার 'যেখানে' অ্যারেতে সঞ্চয় করার জন্য এটি আরও ভাল পদ্ধতি।
স্ট্রিং অ্যারেতে নতুন আইটেম যুক্ত করা হচ্ছে।
String[] myArray = new String[] {"x", "y"};
// Convert array to list
List<String> listFromArray = Arrays.asList(myArray);
// Create new list, because, List to Array always returns a fixed-size list backed by the specified array.
List<String> tempList = new ArrayList<String>(listFromArray);
tempList.add("z");
//Convert list back to array
String[] tempArray = new String[tempList.size()];
myArray = tempList.toArray(tempArray);
<code>
ট্যাগটি ব্যবহার করেছেন এবং এতে জেনেরিক ধরণের সমস্যা ছিল। দয়া করে এই ট্যাগটি এড়াতে চেষ্টা করুন, যেহেতু ... এতে সমস্যা রয়েছে এবং সঠিক ফর্ম্যাটিং পেতে আপনার কোডটি 4 সাদা স্পেসে যুক্ত করুন। আমি আপনার প্রশ্নের জন্য এটি করেছি :)।
অ্যারেতে উপাদান যুক্ত করার বিভিন্ন উপায় রয়েছে। আপনি List
উপাদানটি পরিচালনা করতে একটি টেম্প ব্যবহার করতে পারেন এবং তারপরে এটিকে রূপান্তর Array
করতে পারেন বা আপনি এটি ব্যবহার করতে পারেনjava.util.Arrays.copyOf
আরও ভাল ফলাফলের জন্য এবং জেনেরিকের সাথে একত্র ।
এই উদাহরণটি আপনাকে প্রদর্শন করবে কীভাবে:
public static <T> T[] append2Array(T[] elements, T element)
{
T[] newArray = Arrays.copyOf(elements, elements.length + 1);
newArray[elements.length] = element;
return newArray;
}
এই পদ্ধতিটি ব্যবহার করার জন্য আপনাকে কেবল এটির মতো কল করতে হবে:
String[] numbers = new String[]{"one", "two", "three"};
System.out.println(Arrays.toString(numbers));
numbers = append2Array(numbers, "four");
System.out.println(Arrays.toString(numbers));
আপনি যদি দুটি অ্যারে মার্জ করতে চান তবে আপনি আগের পদ্ধতিটি এভাবে পরিবর্তন করতে পারেন:
public static <T> T[] append2Array(T[] elements, T[] newElements)
{
T[] newArray = Arrays.copyOf(elements, elements.length + newElements.length);
System.arraycopy(newElements, 0, newArray, elements.length, newElements.length);
return newArray;
}
এখন আপনি এই পদ্ধতিটি কল করতে পারেন:
String[] numbers = new String[]{"one", "two", "three"};
String[] moreNumbers = new String[]{"four", "five", "six"};
System.out.println(Arrays.toString(numbers));
numbers = append2Array(numbers, moreNumbers);
System.out.println(Arrays.toString(numbers));
যেমনটি আমি উল্লেখ করেছি, আপনি List
বস্তুগুলিও ব্যবহার করতে পারেন । যাইহোক, এটির মতো এটি নিরাপদ কাস্ট করতে একটু হ্যাক লাগবে:
public static <T> T[] append2Array(Class<T[]> clazz, List<T> elements, T element)
{
elements.add(element);
return clazz.cast(elements.toArray());
}
এখন আপনি এই পদ্ধতিটি কল করতে পারেন:
String[] numbers = new String[]{"one", "two", "three"};
System.out.println(Arrays.toString(numbers));
numbers = append2Array(String[].class, Arrays.asList(numbers), "four");
System.out.println(Arrays.toString(numbers));
newArray[elements.length] = element;
, মানে newArray[elements.length - 1] = element;
?
কেউ যদি সত্যিই একটি অ্যারের আকার পরিবর্তন করতে চায় আপনি এই জাতীয় কিছু করতে পারেন:
String[] arr = {"a", "b", "c"};
System.out.println(Arrays.toString(arr));
// Output is: [a, b, c]
arr = Arrays.copyOf(arr, 10); // new size will be 10 elements
arr[3] = "d";
arr[4] = "e";
arr[5] = "f";
System.out.println(Arrays.toString(arr));
// Output is: [a, b, c, d, e, f, null, null, null, null]
এটি যথেষ্ট পরিমাণে বড় মেমরির আকার পূর্ব-বরাদ্দ করাও সম্ভব। এখানে একটি সাধারণ স্ট্যাক প্রয়োগ: প্রোগ্রামটি 3 এবং 5 আউটপুট দেওয়ার কথা।
class Stk {
static public final int STKSIZ = 256;
public int[] info = new int[STKSIZ];
public int sp = 0; // stack pointer
public void push(int value) {
info[sp++] = value;
}
}
class App {
public static void main(String[] args) {
Stk stk = new Stk();
stk.push(3);
stk.push(5);
System.out.println(stk.info[0]);
System.out.println(stk.info[1]);
}
}