JAVA复习5(总结+循环链表)

泛型的定义: 在类定义的时候给定一个类型

 

Public class Point<T>   给定一个不确定的类型,当类实例化的时候或者使用的时候给定一个确定的类型,则别的数据类型就不能使用了

 

Point<String> p=new Point(); 说明这个类 现在只能存放String

Point<Integer> p=new Point(); 只能存放Integer

泛型的类型不能是基本数据类型

 

 

 

集合:

 

为了解决数据存储的问题,JDK完成的一套数据结构,在开发中肯定会使用数组,但是数组长度是个问题 一旦声明长度不可改变

 

 

集合就是一套动态对象数组  public final Object[] value;

 

 

顺序集合:

 

                            Collection 最大的父接口

 

 List   特点: 有序 可重复          本身也是接口                     Set  不可重复

 

 

使用以上接口,则必须实例化该接口的实现类:

 

List :  ArryList   Vector   LinkedList  

 

ArrayList  Vector 的区别?

 

ArrayList 异步处理 ,非线程安全  效率高  新的类

 

Vector   同步处理, 线程安全    效率低  老的类

 

LinkedList 特点: 实现的方式是基于链表,在进行数据插入 和删除的时候很方便, 但是查询效率不高 

 

ArrayList 特点: 基于数组开发的,在进行数据插入的时候由于在中间部分 效率很低(要移动数据) 但是查询效率很高

 

 

Set:  TreeSet   HashSet

 

TreeSet  有序的  不可重复的集合

 

通过 comparable接口中的 comparTo()方法完成的排序,该方法返回 3个值 1 -1   0 

 

 

HashSet 无序的 不可重复的集合

 

通过哈希表完成的数据存储,每个对象都会生成一个HashCode 对应哈希表中索引,根据Hashcode随机分配

 

根据对象中equals方法来判断集合中的内容是否重复

 

注意: 使用自定义类型的时候,一般来说要实现 Comparble接口,hashCode 和equals方法

 

 

循环链表:

 

Node1 node2 node3--->  node1

 

击鼓传花

package org.node;

 

public class Game {

 

     //实例化链表存储游戏的人数

    

     LinkList   list=new LinkList();

    

    

     int num; //总人数

    

     int key; // 数到几退出

    

    

     // 初始化游戏的方法

    

     public Game(int num,int key) {

         

          this.num=num;

         

          this.key=key;

     }

    

    

     public void play()throws Exception{

         

         

          for(int i=0;i<num;i++) {  //把游戏人数增加到链表中

              

               list.add(i, i);

          }

         

          System.out.println("-----------游戏开始之前------------------");

         

          for(int i=0;i<list.size;i++) {

              

               System.out.print(list.get(i));

          }

         

          System.out.println("------------------游戏开始------------------------");

         

          int jCount=num; //开始人数 等于总人数

         

          int j=0; //累加器

         

          Node node=list.head; //把一个头节点赋值给一个节点

          while(jCount!=1) {

              

               if(node.getElement()!=null&&Integer.parseInt(node.getElement().toString())!=-1) {

                   

                    j++;

                   

                    if(j%key==0) {

                        

                         node.setElement(-1);

                         jCount--;

                         System.out.println();

                         for(int i=0;i<list.size;i++) {

                             

                              System.out.print(list.get(i)+" ");

                         }

                    }

               }

               node=node.next;

          }

         

          System.out.println("---------游戏结束了------------------------");

         

          for(int i=0;i<list.size;i++) {

              

               System.out.print(list.get(i)+" ");

          }

     }

    

     public static void main(String[] args) throws Exception {

         

          Game g=new Game(10, 3);

         

          g.play();

     }

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值