Java集合的Collection接口和List接口詳解
1集合的概念
- 把集合看做是一個(gè)容器,集合不是一個(gè)類,是一套集合框架,框架體系包含很多的集合類,java api提供了
- 集合存儲(chǔ)任意類型(基本包裝類型,引用類型)
- 集合對(duì)元素的增刪查改操作起來(lái)非常方便的,專門提供很多方便操作的方法
- 開(kāi)發(fā)中經(jīng)常集合來(lái)操作數(shù)據(jù)的,開(kāi)發(fā)地位比較高的,考慮對(duì)數(shù)據(jù)的操作效率上的問(wèn)題
2 集合的父類Collection接口
2.1常用方法
- boolean add(E e) 添加某個(gè)元素
- addAll(元素) 添加一個(gè)集合
- remove(object) 刪除一個(gè)元素
- removeAll(collection) 刪除一個(gè)集合
- c.clear(); //移除所有
- isEmpty() 判斷是否為空
public static void main(String[] args) {
//創(chuàng)建集合
Collection c = new ArrayList();
//添加
c.add("張三");
c.add(10);
c.add(false);
c.add('a');
System.out.println(c);
// addAll(元素) 添加一個(gè)集合
Collection c2 = new ArrayList();
c2.add("hello");
c2.add("world");
c2.add("java");
c.addAll(c2);
System.out.println(c);
//刪除
System.out.println("刪除張三元素是否成功:" + c.remove("張三2"));
System.out.println(c);
c.removeAll(c2);
System.out.println("移除c2集合:" + c);
//清空和判斷是否為空
// c.clear(); //移除所有
// System.out.println(c); //[]
System.out.println(c.isEmpty()); //判斷集合中的元素是否為空,為空返回true,否則false
System.out.println(c.contains("張三222")); //是否包含某個(gè)指定的元素,是返回true,否則false
System.out.println("獲取集合中的元素個(gè)數(shù):" + c.size()); //leng屬性
}
2.2遍歷
- 使用foreach 遍歷
- 使用迭代器遍歷
- 使用toArray()方法轉(zhuǎn)成數(shù)組,再遍歷.
- 使用for遍歷
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("張三");
c.add("李四");
c.add("王五");
System.out.println(c);
//foreach遍歷方式
System.out.println("-------------1");
for(Object obj : c){
System.out.println(obj);
}
//iterator方法,方式二
System.out.println("-------------2");
Iterator it = c.iterator();
while(it.hasNext()){
Object obj = it.next();
System.out.println(obj);
}
System.out.println("-------------3");
//方式三,toArray
Object[] objs = c.toArray();
for(Object o : objs){
System.out.println(o);
}
System.out.println("-------------4");
//方式四
for(Iterator iterator = c.iterator();iterator.hasNext();){
Object obj = iterator.next();
System.out.println(obj);
}
System.out.println("-------------5");
for(Iterator iterator = c.iterator();iterator.hasNext(); System.out.println(iterator.next())){}
}
3 List接口
List接口繼承了Collection接口,所以Collection接口的方法List都可以使用.
3.1List接口常用方法
添加
- boolean add(E e) 添加一個(gè)元素
- void add(int index, E element) 添加某個(gè)元素到指定位置
boolean addAll(Collection<? extends E> c) 添加一個(gè)集合
- boolean-addAll(int index, Collection<? extends E> c) 添加一個(gè)集合到指定位置
刪除
- E remove(int index) 刪除指定位置的元素
- boolean remove(Object o) 刪除某個(gè)元素
- boolean removeAll(Collection<?> c) 刪除一個(gè)集合
修改
- E set(int index, E element)
獲取
- E get(int index)
- int size()
- 其他
- int indexOf(Object o)
- int lastIndexOf(Object o)
- List subList(int fromIndex, int toIndex)
3.2遍歷
- E get(int index) + int size()
- ListIterator listIterator()
- ListIterator listIterator(int index)
員工類:
package listdemo;
import java.util.Objects;
public class Employee {
//員工屬性, id name age salary
private Integer id;
private String name;
private Integer age;
private Double salary;
public Employee() {
}
public Employee(Integer id, String name, Integer age, Double salary) {
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Employee employee = (Employee) o;
return Objects.equals(id, employee.id) &&
Objects.equals(name, employee.name) &&
Objects.equals(age, employee.age) &&
Objects.equals(salary, employee.salary);
}
@Override
public int hashCode() {
return Objects.hash(id, name, age, salary);
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
'}';
}
}
public static void main(String[] args) {
//創(chuàng)建一個(gè)list集合
List list = new ArrayList();
//添加的方法
list.add("hello");
list.add("java");
list.add(1,"world"); //添加到指定的位置的元素,添加到第二個(gè)位置
list.add("html");
System.out.println(list);
List list2 = new ArrayList();
list2.add("test1");
list2.add("test2");
list2.add("test3");
// list.addAll(list2); //添加一個(gè)集合
// System.out.println(list);
list.addAll(2,list2); //添加一個(gè)新集合到第一個(gè)老集合中指定的位置,下標(biāo)為2
System.out.println(list);
//刪除
// * boolean remove(Object o)
System.out.println(list.remove("java"));
System.out.println(list);
// * E remove(int index)
Object obj = list.remove(1);
System.out.println(obj); //world
System.out.println(list);
// * boolean removeAll(Collection<?> c)
list.removeAll(list2);
System.out.println("刪除新集合之后:" + list);
//修改
// * E set(int index, E element)
Object o = list.set(1, "編程語(yǔ)言");
System.out.println(o);
System.out.println("修改之后:" + list);
// 其他
// * int indexOf(Object o) 從前面往后某個(gè)元素的位置
// * int lastIndexOf(Object o) 從后面往前面找某個(gè)元素的位置
// * List<E> subList(int fromIndex, int toIndex)
List list3 = new ArrayList();
list3.add("張三");
list3.add("李四");
list3.add("王五");
list3.add("趙六");
list3.add("小編");
int i = list3.indexOf("李四2222");
System.out.println("李四的位置:" + i);
System.out.println("找王五的下標(biāo)位置:" + list3.lastIndexOf("王五"));
System.out.println(list3);
List newsList = list3.subList(1, 4); //從老集合中截取1-3的位置的元素,并返回一個(gè)新的集合
System.out.println(newsList); //1,2的位置的元素,3不包括,
}
List的遍歷
- E get(int index) + int size()
- ListIterator listIterator()
- ListIterator listIterator(int index)
- iterator();
- toArray();
- foreach
- toString
- for()
package listdemo;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/**
*
* 遍歷
* * E get(int index) + int size()
* * ListIterator<E> listIterator()
* * ListIterator<E> listIterator(int index)
* iterator();
* toArray();
* foreach
* toString
* for()
* for()
*
*/
public class ListDemo02 {
public static void main(String[] args) {
//E get(int index) + int size()
List list = new ArrayList();
list.add("張三");
list.add("李四");
list.add("王五");
ListIterator listIterator1 = list.listIterator(1);
if (listIterator1.hasNext()){
System.out.println("從第一個(gè)元素開(kāi)始取出:" +listIterator1.next());
}
if (listIterator1.hasNext()){
System.out.println("繼續(xù)取下一個(gè)元素:" +listIterator1.next());
}
//size獲取集合中元素的個(gè)數(shù)
System.out.println(list.size());
//get(索引)獲取指定索引的元素
// Object o = list.get(0);
// System.out.println(o); //張三
// o = list.get(1);
// System.out.println(o); //李四
// o = list.get(2);
// System.out.println(o); //王五
//以上出現(xiàn)重復(fù),使用循環(huán)解決,結(jié)合size+get方法
for (int i = 0; i < list.size(); i++) {
Object o1 = list.get(i);
System.out.println(o1);
}
List list2 = new ArrayList();
list2.add("hello");
list2.add("world");
list2.add("java");
ListIterator listIterator = list2.listIterator();//列表迭代器方法,返回迭代器對(duì)象
//正向遍歷
while (listIterator.hasNext()) { //判斷集合中是否有可取的下一個(gè)元素,如果有
Object o = listIterator.next(); //取出第一個(gè)元素
System.out.println(o);
}
System.out.println("------------------------");
//逆序遍歷,在使用hasPrevious(),previous(),先正序遍歷才可以使用這個(gè)
while(listIterator.hasPrevious()){
Object obj = listIterator.previous();
System.out.println(obj);
}
}
}
4 集合中元素的去重
package listdemo;
import java.util.ArrayList;
import java.util.List;
/**
* 去除集合中重復(fù)的元素
*/
public class ListDemo03 {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Employee(101,"張三",20,2000.0));
list.add(new Employee(102,"李四",30,3000.0));
list.add(new Employee(103,"王五",20,2000.0));
list.add(new Employee(103,"王五",20,2000.0));
//創(chuàng)建一個(gè)新的集合
List newList = new ArrayList();
for(Object obj : list){
if (!newList.contains(obj)){
newList.add(obj);
}
}
list = newList; //把新集合的數(shù)據(jù)賦值給到老集合
//遍歷老集合
for(Object obj : list){
System.out.println(obj);
}
//第二種去除重復(fù)的方式
//冒泡,選擇,比較equlas
//根據(jù)選擇排序的思想,從第一個(gè)元素依次和后面的每一個(gè)元素
for (int i = 0; i < list.size(); i++) {
for (int j = i+1; j < list.size(); j++) {
//進(jìn)行比較,如果第一個(gè)元素和第二個(gè)元素是相等
//把第二個(gè)元素刪除
if (list.get(i).equals(list.get(j))){
list.remove(j);
j--;
}
}
}
for(Object obj : list){
System.out.println(obj);
}
}
}
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
java IO流將一個(gè)文件拆分為多個(gè)子文件代碼示例
這篇文章主要介紹了java IO流將一個(gè)文件拆分為多個(gè)子文件代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
SpringBoot+netty-socketio實(shí)現(xiàn)服務(wù)器端消息推送
這篇文章主要介紹了SpringBoot+netty-socketio實(shí)現(xiàn)服務(wù)器端消息推送,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
mybatis.type-aliases-package的作用及用法說(shuō)明
這篇文章主要介紹了mybatis.type-aliases-package的作用及用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
java中BCryptPasswordEncoder密碼的加密與驗(yàn)證方式
這篇文章主要介紹了java中BCryptPasswordEncoder密碼的加密與驗(yàn)證方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
SpringBoot jackson 精度處理問(wèn)題解決
由于JavaScript處理的最大數(shù)值限制,較大的雪花ID在JS中容易溢出,為解決此問(wèn)題,可在SpringMVC或SpringBoot中使用@RequestBody注解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10
Java getResource()如何獲取class文件目錄位置
這篇文章主要介紹了Java getResource()如何獲取class文件目錄位置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
Mybatis 動(dòng)態(tài)表名+Map參數(shù)傳遞+批量操作詳解
這篇文章主要介紹了Mybatis 動(dòng)態(tài)表名+Map參數(shù)傳遞+批量操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
SpringBoot打包前重新拉取maven依賴的方法實(shí)現(xiàn)
在使用 Maven 構(gòu)建 Spring Boot 項(xiàng)目時(shí),如果希望在每次打包時(shí)都強(qiáng)制拉取依賴,可以通過(guò)以下方法實(shí)現(xiàn),本文給大家介紹了四種實(shí)現(xiàn)方法,并通過(guò)代碼講解的非常詳細(xì),需要的朋友可以參考下2024-12-12

