java怎么设置动态数组大小

这就是坑:频繁扩容导致性能问题。

别信:扩容时使用ensureCapacity()而不是直接构造大容量对象。

别这么干:不区分容量与元素数量,随意修改容量。

Java的动态数组怎么做

说实话,ArrayList这玩意儿在Java里用得是相当溜,我之前搞项目的时候没少摸。
它就是个动态数组,能随便伸能随便缩,这点比普通数组强太多了。
咱们就拿一个具体的例子说说,比如搞一个存储字符串的ArrayList。

记得有次做用户反馈系统,用户输入的内容五花八门,直接用数组肯定不行,万一用户一次提交一堆,数组长度不够咋办?当时我就new了个ArrayList,用起来特别顺手。
代码片段我随手翻到一段,你看:
java ArrayList feedbackList = new ArrayList(); feedbackList.add("用户A的抱怨"); feedbackList.add("用户B的赞美"); feedbackList.add("用户C的疑问");
这一步一步加进去,ArrayList会自动调整内部数组大小。
它不是像数组那样固定长度,而是底层用了数组+扩容策略。
说白了,默认情况下,每次扩容会乘以1 .5 倍,这招挺聪明,避免了频繁扩容。
我查过JDK 8 的源码,发现初始容量是1 0,每次扩容大约是oldCapacity + (oldCapacity >> 1 ),也就是加上原容量的一半。

删除元素也挺简单,比如要删第二个元素(下标1 ),直接feedbackList.remove(1 )就行。
但要注意,这个操作时间复杂度是O(n),因为要把后面的元素往前搬。
有次我写一个删除重复元素的函数,就卡在这儿,效率低得离谱。
后来改用LinkedHashMap才解决。

说到遍历,最原始的方法还是用for循环,像这样:
java for (int i = 0; i < feedbackList> 不过现在大家都爱用for-each,看着干净:
java for (String feedback : feedbackList) { System.out.println(feedback); }
Java 5 之后泛型是标配了,用ArrayList这种声明类型,编译器能帮你检查错误,省得运行时才发现装了Integer进String列表这种低级错误。
我刚开始学泛型时,老是犯这种错,调了半天bug,后来写代码前会习惯性加上泛型声明。

还有个有意思的点,ArrayList不是线程不安全的。
如果你在多线程里直接用,比如一个线程在add,另一个在remove,那肯定出问题。
我之前做分布式任务调度时,就踩过这个坑。
后来改用Collections.synchronizedList包装一下,或者直接上CopyOnWriteArrayList,问题就解决了。

你看,就这么一个简单的动态数组,里面门道还挺多。
用多了,你会发现它简直是个万能工具,尤其处理不确定数量的数据时。
当然,它也不是万能的,比如如果你知道数据量固定且很大,用原始数组可能更快,因为ArrayList多了不少封装开销。
这块我没亲自跑过详细 benchmarks,但直觉上感觉ArrayList在数据量不是特别大时,性能是够用的。

java中怎么给动态数组赋值

上周看Java代码。
ArrayList赋值方法挺多。

2 02 3 年3 月1 5 日。
我那个朋友讲过。

1 . 直接赋值。
用add()方法。
比如。

java ArrayList names = new ArrayList(); names.add("John"); names.add("Mary"); names.add("Bob");
2 . 循环赋值。
用for循环。

java ArrayList numbers = new ArrayList(); for(int i = 0; i < 5> 3 . 集合工厂方法。
用List.of()。

java ArrayList colors = new ArrayList(List.of("Red", "Green", "Blue"));
4 . 构造函数赋值。
用Arrays.asList()。

java ArrayList values = new ArrayList(Arrays.asList(1 .2 , 3 .4 , 5 .6 ));
注意事项是。
ArrayList会自动调整大小。
元素类型不限。
可以用set()替换元素。

示例代码。
我试过。

java import java.util.ArrayList; import java.util.Arrays; import java.util.List;
public class Main { public static void main(String[] args) { ArrayList names = new ArrayList(); names.add("John"); names.add("Mary"); names.add("Bob"); System.out.println("Names:" + names);
ArrayList numbers = new ArrayList(); for(int i = 0; i < 5> ArrayList colors = new ArrayList(List.of("Red", "Green", "Blue")); System.out.println("Colors:" + colors);
ArrayList values = new ArrayList(Arrays.asList(1 .2 , 3 .4 , 5 .6 )); System.out.println("Values:" + values);
names.set(0, "Alice"); System.out.println("UpdatedNames:" + names); } }
输出结果是这样的。

Names:[John, Mary, Bob] Numbers:[0, 1 , 2 , 3 , 4 ] Colors:[Red, Green, Blue] Values:[1 .2 , 3 .4 , 5 .6 ] UpdatedNames:[Alice, Mary, Bob]
这部分我不确定。
你看着办。