0
点赞
收藏
分享

微信扫一扫

【达内课程】集合之ArrayList


文章目录

  • ​​ArrayList 介绍​​
  • ​​ArrayList 使用​​
  • ​​举例:ArrayList 方法使用练习​​
  • ​​举例:兴趣选择​​

ArrayList 介绍

ArrayList 内部使用数组存放数据,相当于 动态数组。提供了相关的添加、删除、修改、遍历等功能。

存放数据时
1、在内部数组存空位置存放数据
2、放满后,创建一个原来1.5倍的新数组,原来的值复制下来,再往里存放数据

以上这两个过程中,1 的效率高,2 的效率低。

删除或添加数据时
1、如果从中间删除一个数据,后面的数据需要向前移动,效率不高。
2、头部加一个数据,后面的数据需要向后移动,而且可能数组放满,会创建新数组,效率不高。

访问数据时
ArrayList 类实现了 List 接口,由 ArrayList 类实现的 List 集合采用数组结构保存对象。数组结构的优点是便于对集合进行快速的随机访问,如果经常需要根据索引位置访问集合中的对象,使用由 ArrayList 类实现的List集合的效率较好。

ArrayList VS LinkedList
1、如果应用程序对数据有较多的随机访问,ArrayList 对象要优于 LinkedList 对象;
2、如果应用程序有更多的插入或者删除操作,较少的随机访问,LinkedList 对象要优于ArrayList对象;
3、不过ArrayList的插入,删除操作也不一定比 LinkedList 慢,如果在 List 靠近末尾的地方插入,那么 ArrayList 只需要移动较少的数据,而 LinkedList 则需要一直查找到列表尾部,反而耗费较多时间,这时 ArrayList 就比 LinkedList 要快。

ArrayList 使用

创建对象

方法一:不初始化容量

ArrayList arr1 = new ArrayList();

内部数组初始容量10,如果加满了10个,内部数组会创建1个1.5倍更长的数组

方法二:初始化容量

ArrayList arr2 = new ArrayList(100);

可以预先估计初始用量,内部数组初始用量100。减少内部数组创建次数,效率会提高。

需要注意的是 ​​arr.size() = 0​​ 是指加入的数据的数量,不是数组容量。

方法
与 LinkedList 相同,但没有两端操作数据的方法。【​​​LinkedList 传送门​​】

举例:ArrayList 方法使用练习

public static void main(String[] args) throws ParseException {
ArrayList<Integer> list = new ArrayList<>();
list.add(111);
list.add(222);
list.add(444);
System.out.println(list.size());//3
System.out.println(list);//[111, 222, 444]
list.add(2, 333);
System.out.println(list);//[111, 222, 333, 444]
System.out.println(list.get(0));//111
System.out.println(list.get(list.size() - 1));//444
System.out.println(list.contains(111));//true
System.out.println(list.set(0, 555));
System.out.println(list);//[555, 222, 333, 444]
System.out.println(list.remove(2));//333
System.out.println(list);//[555, 222, 444]
//如果写list.remove(555)程序会认为移除下标为555的值
//因为本栗子中使用的是Integer对象,所以对555封装成Integer对象
//这样才会认为移除的是一个数据,而不是下标值
System.out.println(list.remove(Integer.valueOf(555)));//true
System.out.println(list);//[222, 444]

//下标遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
//输出
//222
//444

//迭代器遍历
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
//输出
//222
//444
}

举例:兴趣选择

效果图
【达内课程】集合之ArrayList_数组

xml

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="0,1,2">

<TableRow>

<CheckBox
android:onClick="doClick"
android:text="足球" />

<CheckBox
android:onClick="doClick"
android:text="篮球" />

<CheckBox
android:onClick="doClick"
android:text="气球" />
</TableRow>

<TableRow>

<CheckBox
android:onClick="doClick"
android:text="流行乐" />

<CheckBox
android:onClick="doClick"
android:text="古典乐" />

<CheckBox
android:onClick="doClick"
android:text="小月月" />
</TableRow>

<TableRow>

<CheckBox
android:onClick="doClick"
android:text="京剧" />

<CheckBox
android:onClick="doClick"
android:text="戏剧" />

<CheckBox
android:onClick="doClick"
android:text="杯具" />
</TableRow>

<TableRow>

<CheckBox
android:onClick="doClick"
android:text="抽烟" />

<CheckBox
android:onClick="doClick"
android:text="喝酒" />

<CheckBox
android:onClick="doClick"
android:text="烫头" />
</TableRow>

<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#222222"
android:textSize="18sp"
android:gravity="center"/>
</TableLayout>

java

public class MainActivity extends AppCompatActivity {

ArrayList<String> list = new ArrayList<>();
TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textView = findViewById(R.id.textView);

}

public void doClick(View view) {
CheckBox checkBox = (CheckBox) view;
String s = checkBox.getText().toString();
if (checkBox.isChecked()) {
list.add(s);
} else {
list.remove(s);
}

textView.setText("");

for (int i = 0; i < list.size(); i++) {
if (i != 0) {
textView.append(",");
}
textView.append(list.get(i));
}
}
}

运行结果:
【达内课程】集合之ArrayList_arraylist_02

举报

相关推荐

0 条评论