Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Jan 6, 2023. It is now read-only.

Commit 92b746c

Browse files
⚡ Optimized DynamicArray
1 parent 4ab47b9 commit 92b746c

File tree

2 files changed

+42
-11
lines changed

2 files changed

+42
-11
lines changed
999 Bytes
Binary file not shown.

‎src/SomeUtils/DynamicArray/DynamicArray.java

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
public class DynamicArray<T>{
44
//Just a demo.
5-
public static void main(String[]a){
5+
public static void main(String[]a)throwsException{
66
// Could be DynamicArray<Object> ... =new DynamicArray<>();
77
DynamicArray<String> dynamics=new DynamicArray<String>();
88
dynamics.set(5, "This is the fifth slot!");
@@ -12,41 +12,72 @@ public static void main(String[]a){
1212
System.out.println(
1313
java.util.Arrays.toString(dynamics.getArray())
1414
);
15-
//Can throw ArrayIndexOutOfBounds if not used "properly".
15+
System.out.println("But this is how it really looks like:");
16+
System.out.println(
17+
java.util.Arrays.toString(dynamics.getRealArray())
18+
);
19+
//Can throw ArrayIndexOutOfBoundsException if not used "properly".
1620
System.out.println(dynamics.get(10));
1721
dynamics=new DynamicArray<String>(
1822
new String[]{"Hello?", "Is", "It", "..."}
1923
);
2024
System.out.println(
2125
java.util.Arrays.toString(dynamics.getArray())
2226
);
27+
System.out.println("But this is how it really looks like:");
28+
System.out.println(
29+
java.util.Arrays.toString(dynamics.getRealArray())
30+
);
31+
System.out.println("Pre initialized arrays are not automatically expanded until the #get() method is called.");
2332
}
24-
//Would rather use a List<> to be honest.
2533
//The class itself
34+
//It's an empty array, we're not affecting any data at all.
35+
@SuppressWarnings("unchecked")
36+
T[] underlyingArr=(T[])new Object[0];
37+
int size=0;
38+
int actualSize=0;
2639
public DynamicArray(){}
2740
public DynamicArray(final T[] newArr){
2841
underlyingArr=newArr;
42+
actualSize=newArr.length;
43+
size=newArr.length;
2944
}
30-
//T is an Object, don't mind it too much.
31-
//Also, it's an empty array, we're not affecting any data at all.
32-
@SuppressWarnings("unchecked")
33-
T[] underlyingArr=(T[])new Object[0];
3445
public void set(final int ind, final T value){
35-
if(underlyingArr.length<ind+1){
46+
if(actualSize<ind+1){
3647
//It's an empty array, we're not affecting any data at all.
3748
@SuppressWarnings("unchecked")
38-
final T[] duplicate=(T[])new Object[ind+1];
49+
final T[] duplicate=(T[])new Object[ind+10];
3950
System.arraycopy(
40-
underlyingArr, 0, duplicate, 0, underlyingArr.length
51+
underlyingArr, 0, duplicate, 0, actualSize
4152
);
53+
actualSize=ind+10;
4254
underlyingArr=duplicate;
4355
}
56+
if(size<ind+1)
57+
size=ind+1;
4458
underlyingArr[ind]=value;
4559
}
46-
public T get(final int ind){
60+
public T get(final int ind)throws ArrayIndexOutOfBoundsException{
61+
if(ind>size-1)
62+
throw new ArrayIndexOutOfBoundsException(
63+
new StringBuilder("Index ")
64+
.append(String.valueOf(ind))
65+
.append(" out of bounds for length ")
66+
.append(size)
67+
.toString()
68+
);
4769
return underlyingArr[ind];
4870
}
71+
public T[] toArray(){
72+
return getArray();
73+
}
4974
public T[] getArray(){
75+
@SuppressWarnings("unchecked")
76+
final T[] returnMe=(T[])new Object[size];
77+
System.arraycopy(underlyingArr, 0, returnMe, 0, size);
78+
return returnMe;
79+
}
80+
public T[] getRealArray(){
5081
return underlyingArr;
5182
}
5283
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /