集合 简单 案例

package com.oracle.Test;

    import java.util.ArrayList;
    import java.util.Collection;

    public class Demo02 {

        /*
         * 去除重复的常见逻辑 (如果已有API可以满足你的需要.就使用已有的.)
         *
         *   1. 利用第一次出现的位置和最后一次出现的位置.比较两个位置
         *   是否相同.如果位置一样代表没有重复.如果位置不相同代表有重复.
         *
         *
         *   2.取集合中的第一个元素.将该元素保存下来.
         *       从当前集合中移除第一个元素.再利用contains方法来验证
         *       如果返回值为false 代表没有重复.如果返回值为true.求下标
         *   移除..重复直到contains的返回值为false.
         *
         *
         * 关于查找:
         *
         *
         */
        public static void main(String[] args) {
            //--1  提供一个集合
            ArrayList<Character> list = new ArrayList<>();
            //--2  循环赋值   a97     0 48
            for(int i = 0 ; i < 20 ;i ++){
                list.add((char)(Math.random()*15 + 97));
            }
            System.out.println(list);
            //--3  遍历集合
            Collection<Character> cList = new ArrayList<>();
            int length = list.size();
            while(length > 0){
                //--取出一个元素
                Character c = list.get(0);
                //--求第一次出现的下标和最后一次出现的下标
                int index = list.indexOf(c);         //indexOf( Object o)第一次出现的下标
                int lastIndex = list.lastIndexOf(c); //lastIndexOf( Object o)最后一次出现的下标
                //--如果下标不一致则有重复元素
                if (index == lastIndex) {
                    System.out.println(1 +""+ c);
                    list.remove(c);
                    length = list.size();
                }else{
                    //-- 将该元素添加到一个新的集合中.
                    cList.clear();
                    cList.add(c);
                    //-- 获取原有长度
                    //-- 利用removeAll方法.一次行把和该值相同的元素移除
                    list.removeAll(cList);
                    System.out.println(length - list.size() + "" + c );
                    length = list.size();
                }
            }
            //--4  查找重复
            //--5  打印元素和重复的个数 

        }
    }
时间: 2024-10-10 16:36:34

集合 简单 案例的相关文章

[Design Pattern] Iterator Pattern 简单案例

Iterator Pattern,即迭代时模式,按照顺序依次遍历集合内的每一个元素,而不用了解集合的底层实现,属于行为类的设计模式.为了方便理解记忆,我也会称其为遍历模式. 下面是一个迭代器模式的简单案例. Iterator 定义了迭代接口, 仅 hasNext 和 next 两个方法.Container 定义了集合的接口,必须包含一个返回迭代器类 Iterator 的方法.NameRepository 是容器的具体类,实现 Container 接口,并拥有一个内部类 NameIterator

ExpandableListView的简单案例

ExpandableListView介绍: 长话短说,ExpandableListView就是ListView的扩展.像QQ好友分组列表.看下面的效果图,就知道了. 效果图: ExpandableListView有几个属性值得一说: android:childDivider 来分离子列表项的图片或者是颜色.注:图片不会完全显示,分离子列表项的是一条直线 android:childIndicator 在子列表项旁边显示的指示符.注:可以是一个图片 android:childIndicatorLef

SSM框架整合(Spring+SrpingMVC+Mybatis) 简单案例

简介: SSM框架是Spring,SpringMVC 和Mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,dao层四层. Spring实现对业务对象的管理,SpirngMVC负责请求的转发和视图管理,Mybatis作为数据对象的持久化引擎. 简单案例: 一,创建web项目,建好项目结构目录(controller,service,mapper等目录),引入所需的jar包并配置tomcat 这里放上最终的项目结构: pom.xml(继承于

keepalived简单案例

---------------------------------- 一.前言 二.环境 三.Keepalived体系架构 四.安装Keepalived 五.案例配置 ---------------------------------- 一.前言 keepalived是一个类似于layer3,4&5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的

[Design Pattern] Mediator Pattern 简单案例

Meditor Pattern,即调解模式,用一个调解类类处理所有的沟通事件,使得降低多对象之间的沟通难度,属于行为类的设计模式.为了方便理解记忆,我也称其为,沟通模式. 下面是一个调解模式的简单案例. ChatRoom 提供公用发送短信的方法.User 全部通过 ChatRoom 类发送信息进行沟通.MediatorPatternDemo 演示调解模式. 代码实现 ChatRoom 提供发送信息的方法 public class ChatRoom { public static void sho

[Design Pattern] Observer Pattern 简单案例

Observer Pattern,即观察者模式,当存在一对多关系,例如一个对象一有变动,就要自动通知被依赖的全部对象得场景,属于行为类的设计模式. 下面是一个观察者模式的简单案例. Observer 定义观察者的接口,定义需要观察的对象,已经被通知的接口.BinaryObserver, OctalObserver, HexaObserver 各自实现了 Observer 接口. Subject 是被观察的对象,记录了观察该对象的观察者列表,自身有变动,即可通知观察者列表中的各个观察者. 代码实现

[Design Pattern] Command Pattern 简单案例

Command Pattern, 即命令模式,把一个命令包裹在一个对象里面,将命令对象传递给命令的执行方,属于行为类的设计模式 下面是命令模式的一个简单案例. Stock 代表被操作的对象.Order 定义命令的接口,BuyStock, SellStock 是具体类,实现 Order 接口.Broker 是命令的执行方.CommandPatternDemo 演示命令模式. 代码实现 Order, 命令接口 public interface Order { public void execute(

[Design Pattern] Proxy Pattern 简单案例

Proxy Pattern, 即代理模式,用一个类代表另一个类的功能,用于隐藏.解耦真正提供功能的类,属于结构类的设计模式. 下面是 代理模式的一个简单案例. Image 定义接口,RealImage, ProxyImage 都实现该接口.RealImage 具有真正显示功能,ProxyImage 作为代表,暴露给客户端使用. 代码实现: public interface Image { public void display(); } RealImage 的实现,提供真正的功能 public

[Design Pattern] Facde Pattern 简单案例

Facade Pattern, 即外观模式,用于隐藏复杂的系统内部逻辑,提供简洁的接口给客户端调用,属于结构类的设计模式.我会将其名字理解为,门户模式. 下面是 Facade Pattern 的一个简单案例. Shape 定义一个接口,Circle, rectangle, Square 分别实现 Shape 接口,代表系统内部的一个功能.ShapeMaker 作为一个对外类,提供简洁的接口给外部调用. 代码实现: Shape 接口 public interface Shape { public