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); }}

相关文章
相关标签/搜索