java學習第11天

集合
     集合 --》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); }}

相關文章
相關標籤/搜索