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