集合
集合 --》java AIP 所提供的一系列類的實例 能夠用於動態存放多個對象java
集合中泛型的使用
在定義一個集合時就指定集合存儲的對象的數據類型node
泛型方法
public static <T>void method(T t){}
public static<T> T method(T t){return (T) Object}數組
泛型接口對象
interface 0perator<T>{void add(T t);}接口
----------------------------------------------------------------內存
ArrayListelement
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(1); // 基本類型的包裝類 -- Integer
list.add(true);
list.add("string");
System.out.println(list); //[1, true, string]
Object object = list.get(1);
if(object instanceof Boolean){
System.out.println("boolean 類型");
}else if(object instanceof Integer){
System.out.println("Integer 類型");
}else if(object instanceof String){
System.out.println("String 類型");
}
System.out.println(object);
//泛型:規定你進行操做的是數據類型
ArrayList<String> list2 = new ArrayList<String>();
list2.add("abcdefg");
//list2.add(11); 經過泛型限定類型,若是你放其餘類型進集合,會報錯
String string = list2.get(0);
System.out.println(string);
ArrayList<Integer> list3 = new ArrayList<Integer>();
list3.add(1);
System.out.println(list3.get(0));
}
}rem
-------------------------------------------------------------------------get
//泛型的標籤
//調用方法的時候,能夠經過傳入不一樣參數類型,進而根據類型執行結果
//
public static <E> void method(E e){
System.out.println(e.getClass().getName());
}
//這個叫泛型方法,能夠具體規定,某一類對象進行操做此方法
public static <E extends Person> void method2(E e){
System.out.println(e.getName());
}string
-------------------------------------------------------------------------
import java.util.ArrayList;
import java.util.Iterator;
public class ListMethod {
public static void main(String[] args) {
//list集合的經常使用方法
//elementData 底層實現的是用數組進行保存
ArrayList<String> list = new ArrayList<String>();
//list打印元素順序跟添加順同樣
/*boolean boo = */
list.add("0"); //list添加元素是否成功
list.add("0");
list.add("0");
list.add("0");
list.add("0");
list.add("0");
list.add("0");
list.add("0");
System.out.println(list);
System.out.println("size():" + list.size());
//搜索
//contains(Object o) //判斷元素是否存在
if(list.contains("0")){
System.out.println("存在");
}
//contains 使用equals 進行內存地址比較,若是自定義類須要根據屬性進行判斷是否
//相等時,此時必須相應的重寫Object equals方法
/*ArrayList<Point> points = new ArrayList<Point>();
Point point1 = new Point(1, 1);
Point point2 = new Point(1, 1);
points.add(new Point(1, 1));
points.add(point2);
if(points.contains(point1)){
System.out.println("存在");
}else{
System.out.println("不存在");
}*/
//get(int index) 獲取 。index
System.out.println(list.get(3));
//indexOf(Object o)
//返回的是元素在list裏面的下標,若是元素不存在,返回-1
System.out.println(list.indexOf("a啊啊"));
//isEmpty() list.clear();
// list.clear(); 清空list集合
if(list.isEmpty()){
System.out.println("是空的");
}else{
System.out.println("不是空的");
}
//查找list的最後一個元素下標
System.out.println(list.lastIndexOf("0"));
//遍歷
//第一種:普通for循環
for(int i = 0; i < list.size(); i++){
System.out.print(list.get(i) + " ");
}
System.out.println();
//第二種:加強的for循環
for(String str : list){
System.out.print(str + " ");
}
System.out.println();
//第三種:迭代循環
//獲取迭代器
Iterator<String> iterator = list.iterator();
for(;iterator.hasNext(); ){
System.out.print(iterator.next() + " ");
}
//iterator 循環一次以後,若是你在進行調用的時候,必定注意他的位置
//iterator 沒有提供復位方法,那麼只能從新new 另一個迭代器
//用法注意點:使用迭代器,同樣要當心next 的使用,若是循環中沒有next
//讓迭代器進行迭代,那麼頗有可能陷入死循環
iterator = list.iterator();
/*while (iterator.hasNext()) {
System.out.println("進來了....");
}*/
//三種循環使用條件
ArrayList<String> list2 = new ArrayList<String>();
list2.add("0");
list2.add("1");
list2.add("2");
list2.add("3");
list2.add("4");
list2.add("5");
list2.add("6");
list2.add("7");
System.out.println();
//若是list須要循環添加後刪除時,不要使用for循環
//由於容易形成下標混亂
/*System.out.println("刪除前:" + list2);
for(int i = 0; i < list2.size(); i++){
list2.remove(i);
}
System.out.println("刪除後:" + list2);*/
//java.util.ConcurrentModificationException
//加強for循環,只能用於循環遍歷,沒法進行修改(添加 刪除)
//由於語法要求,for循環中的集合或數組能動態改變
/*for(String str : list2){
list2.add("11222");
}*/
//迭代器進行迭代是經過iterator2.next()進行的,若是next超過元素的個會報錯
//java.util.NoSuchElementException
System.out.println("刪除前:" + list2);
Iterator<String> iterator2 = list2.iterator();
/*for(;iterator2.hasNext();){
String a = iterator2.next();
if("1".equals(a)){
iterator2.remove();
}
}*/
/*for(;iterator2.hasNext();){
iterator2.next();
iterator2.next();
if("1".equals(iterator2.next())){
iterator2.remove();
}
}*/
/*int i = 0;
for(;iterator2.hasNext();){
if("1".equals(iterator2.next())){
System.out.println("-----");
iterator2.remove();
}
i++;
}
System.out.println(i);
*/
for(;iterator2.hasNext();){
if("1".equals(iterator2.next())){
// java.util.ConcurrentModificationException
//只能同過迭代進行操做list2集合
/*list2.add("11");
list2.add("111");*/
}
}
System.out.println("刪除後:" + list2);
/**
* 總結:什麼使用for 加強 for 迭代
* 一、程序關注下吧時候使用for
* 二、程序關注元素內容(元素加工,非添加或刪除,而是修改元素的屬性)
* 使用加強for
* 三、若是元素進行的修改(指刪除,迭代器的刪除),使用迭代器
*/
}
}
------------------------------------------------------------------------
三種循環遍歷
public class Test {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<Student>();
for(int i = 0; i < 10; i++){
list.add(new Student("name_" + i , "password_" + i));
}
System.out.println(list);
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i).toString());
}
System.out.println("加強型for循環--------------------");
for(Student student : list){
student.setName("aaaaa");
System.out.println(student);
}
System.out.println("迭代循環--------------------");
Student stud =null;
for(Iterator<Student> iterator = list.iterator(); iterator.hasNext();){
stud = iterator.next();
System.out.println(stud);
}
}
}
------------------------------------------------------------------------------
鏈表
public class Node {
public Node next; //向後
public String data;
public Node priv; //向前
public static void main(String[] args) {
/*//單項鍊表 start
Node node1 = new Node();
Node node2 = new Node();
Node node3 = new Node();
//1 --> 2
node1.next = node2;
node2.next = node3;
node3.next = null;
//單項鍊表 end
*/
//雙向鏈表
Node node1 = new Node();
Node node2 = new Node();
Node node3 = new Node();
//1--->2 ---> 3
node1.next = node2;
node2.next = node3;
node3.next = null;
// 3 ---> 2 ---> 1
node3.priv = node2;
node2.priv = node1;
node1.priv = null;
}
}
-------------------------------------------------------------------------------
鏈表集合
import java.util.LinkedList;
import java.util.ListIterator;
public class LinkedDemo { public static void main(String[] args) { LinkedList<String> list = new LinkedList<String>(); //鏈表 list.add("0"); list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); list.add("6"); list.add("7"); ListIterator<String> listIterator = (ListIterator<String>) list.iterator(); /*for(; listIterator.hasNext();){ System.out.println(listIterator.next()); } System.out.println("----------------------------"); for(; listIterator.hasPrevious();){ System.out.println(listIterator.previous()); }*///previous 像後移 和next 向前相反 for(; listIterator.hasNext();){//判斷右邊還有沒有值 //listIterator.add("8"); //list.add("888"); listIterator.next(); //向右邊迭代 移動 listIterator.set("88"); //將當前對應下標對應的值設置88 System.out.println(listIterator.nextIndex()); //下一個下標示多少 System.out.println(list); } String str = null; for(;listIterator.hasPrevious();){//判斷左邊還有沒有值 str = listIterator.previous();//向左邊 迭代 移動 System.out.println(str); } //System.out.println(list); }}