Java集合的Collection接口和List接口詳解
1集合的概念
- 把集合看做是一個(gè)容器,集合不是一個(gè)類,是一套集合框架,框架體系包含很多的集合類,java api提供了
- 集合存儲任意類型(基本包裝類型,引用類型)
- 集合對元素的增刪查改操作起來非常方便的,專門提供很多方便操作的方法
- 開發(fā)中經(jīng)常集合來操作數(shù)據(jù)的,開發(fā)地位比較高的,考慮對數(shù)據(jù)的操作效率上的問題
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, "編程語言"); 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è)元素開始取出:" +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();//列表迭代器方法,返回迭代器對象 //正向遍歷 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é)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
spring boot配置MySQL數(shù)據(jù)庫連接、Hikari連接池和Mybatis的簡單配置方法
這篇文章主要介紹了spring boot配置MySQL數(shù)據(jù)庫連接、Hikari連接池和Mybatis的簡單配置方法,需要的朋友可以參考下2018-03-03Java虛擬機(jī)調(diào)用Java主類的main()方法
這篇文章主要介紹了Java虛擬機(jī)調(diào)用Java主類的main()方法,前一篇文章我們介紹了關(guān)于Java虛擬機(jī)HotSpot2021-11-11解決java啟動時(shí)報(bào)線程占用報(bào)錯:Exception?in?thread?“Thread-14“?java.ne
這篇文章主要給大家介紹了關(guān)于解決java啟動時(shí)報(bào)線程占用:Exception?in?thread?“Thread-14“?java.net.BindException:?Address?already?in?use:?bind的相關(guān)資料,文中將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04springboot為異步任務(wù)規(guī)劃自定義線程池的實(shí)現(xiàn)
本文主要介紹了springboot為異步任務(wù)規(guī)劃自定義線程池,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06Spring Date jpa 獲取最新一條數(shù)據(jù)的實(shí)例代碼
這篇文章主要介紹了Spring Date jpa 獲取最新一條數(shù)據(jù)的實(shí)例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10IntelliJ?IDEA的代碼擱置功能實(shí)現(xiàn)
本文主要介紹了IntelliJ?IDEA的代碼擱置功能實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01