精华内容
下载资源
问答
  • 4个主要的map实现类介绍

    万次阅读 多人点赞 2019-07-31 18:36:57
    map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍): HashMap:我们最常用的Map,HashMap的值是没有顺序的,他是按照key的HashCode来...

    一、简单介绍

    map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):

    HashMap:我们最常用的Map,HashMap的值是没有顺序的,他是按照key的HashCode来实现的,就是根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null。非同步的。

    TreeMap: 能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。

    Hashtable: 与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢,只有hashtable是继承自Dictionary抽象类的,hashMap和treeMap都继承自AbstractMap抽象类,LinkedHashMap继承自hashMap。

    LinkedHashMap: 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。

    一些常识:

    1.Collection与Map集合是不是继承自Object?--不是,两个都是接口,Object是类,怎么可能会继承自Object,详细看java.util下的具体接口。

    二、Map排序

    TreeMap

    TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。

    Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,该方法主要是根据第一个参数o1,小于、等于或者大于o2分别返回负整数、0或者正整数。如下:

     

    复制代码代码如下:


    public class TreeMapTest {
        public static void main(String[] args) {
            Map<String, String> map = new TreeMap<String, String>(
                    new Comparator<String>() {
                        public int compare(String obj1, String obj2) {
                            // 降序排序
                            return obj2.compareTo(obj1);
                        }
                    });
            map.put("c", "ccccc");
            map.put("a", "aaaaa");
            map.put("b", "bbbbb");
            map.put("d", "ddddd");

            Set<String> keySet = map.keySet();
            Iterator<String> iter = keySet.iterator();
            while (iter.hasNext()) {
                String key = iter.next();
                System.out.println(key + ":" + map.get(key));
            }
        }
    }

     

    运行结果如下:

    d:ddddd 
    c:ccccc 
    b:bbbbb 
    a:aaaaa

    上面例子是对根据TreeMap的key值来进行排序的,但是有时我们需要根据TreeMap的value来进行排序。对value排序我们就需要借助于Collections的sort(List<T> list, Comparator<? super T> c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较。如下:

     

    复制代码代码如下:


    public class TreeMapTest {
        public static void main(String[] args) {
            Map<String, String> map = new TreeMap<String, String>();
            map.put("d", "ddddd");
            map.put("b", "bbbbb");
            map.put("a", "aaaaa");
            map.put("c", "ccccc");

            //这里将map.entrySet()转换成list
            List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
            //然后通过比较器来实现排序
            Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
                //升序排序
                public int compare(Entry<String, String> o1,
                        Entry<String, String> o2) {
                    return o1.getValue().compareTo(o2.getValue());
                }

            });

            for(Map.Entry<String,String> mapping:list){ 
                   System.out.println(mapping.getKey()+":"+mapping.getValue()); 
              } 
        }
    }

     


    运行结果

    a:aaaaa 
    b:bbbbb 
    c:ccccc 
    d:ddddd

    HashMap

    我们都是HashMap的值是没有顺序的,他是按照key的HashCode来实现的。对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序,我们一样的也可以实现HashMap的排序。

     

    复制代码代码如下:


    public class HashMapTest {
        public static void main(String[] args) {
            Map<String, String> map = new HashMap<String, String>();
            map.put("c", "ccccc");
            map.put("a", "aaaaa");
            map.put("b", "bbbbb");
            map.put("d", "ddddd");

            List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
            Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
                //升序排序
                public int compare(Entry<String, String> o1,
                        Entry<String, String> o2) {
                    return o1.getValue().compareTo(o2.getValue());
                }

            });

            for(Map.Entry<String,String> mapping:list){ 
                   System.out.println(mapping.getKey()+":"+mapping.getValue()); 
              } 
         }
    }

     

    运行结果

    a:aaaaa 
    b:bbbbb 
    c:ccccc 
    d:ddddd

    展开全文
  • 今天我们讨论问题是:接口 对象 = new 实现类实现类 对象= new 实现类??? Java 中到底是应该用接口类型 还是实现类的类类型去引用对象? //implA 为接口 ClassA为其实现类 implA a=new ClassA();//...

    今天我们讨论问题是:接口 对象 = new 实现类 与 实现类 对象= new 实现类???

    Java 中到底是应该用接口类型 还是实现类的类类型去引用对象?

     

    //implA 为接口 ClassA为其实现类
    implA a=new ClassA();//接口类型的引用变量A 去接收对象地址
    or
    ClassA a=new ClassA();//类类型的引用变量A 去接收对象地址

     

    我们假设有一个接口A ,和它得实现类B,简化代码如下:

    public interface InterA{
    
        void request();
    }
    
    public class ImplA implements InterA {
    
        @Override
        public void request() {
            System.out.println("接口中的方法");
        }
    
        public void specile() {
            System.out.println("实现类中特殊的方法");
        }
    }

    测试类:

    public class Test {
    
        public static void main(String[] args) {
            /**
             * 接口类型的引用变量A 去接收对象地址,只能调用接口中的方法
             */
            InterA a= new ImplA();
            a.request();
    
            /**
             * 类类型的引用变量A 去接收对象地址,可以调用很多方法
             */
            ImplA b = new ImplA();
            b.request();
            b.specile();
        }
    }
    InterA a= new ImplA();

    用接口类型的引用变量demo,去接收实现类B实例化出来的对象地址(这里的=是传递的地址)。为什么不是 ImplA b = new ImplA();呢,这样也不会有问题啊?(当然InterA a= new InterA();是不可能的,因为接口是不能用来实例化对象的,但可以用来声明一个接口类型的引用变量)。

     

    转载于:https://www.cnblogs.com/xiaoheliu1024/p/10918017.html

    展开全文
  • 接口和实现类的互相跳转是使用IntelliJ IDEA过程中常用的操作,在此记录一下: 1.Service接口跳转到实现类 操作:在接口类的方法上使用快捷键Ctrl+Alt+B,或者点击下图所示位置 2.Service实现类跳转到接口类...

    接口和实现类的互相跳转是使用IntelliJ IDEA过程中常用的操作,在此记录一下:

     

    1.Service接口跳转到实现类

    操作:在接口类的方法上使用快捷键Ctrl+Alt+B,或者点击下图所示位置

    intellij-idea-interface-impl-1.jpg

    2.Service实现类跳转到接口类方法

    操作:在实现类的方法上使用快捷键Ctrl+U,或点击下图所示位置

    intellij-idea-interface-impl-2.jpg

    3.Dao接口跳转到实现类(mapper.xml文件)

    需借助插件Free Mybatis plugins,请到Setting->Plugins搜索安装。

    操作:在接口上使用快捷键Ctrl+Alt+B,或者点击下图所示位置

    intellij-idea-interface-impl-3.jpg

    4.Dao实现类(mapper.xml文件)跳转到接口类方法

    需借助插件Free Mybatis plugins,请到Setting->Plugins搜索安装。

    操作:点击下图所示位置

    intellij-idea-interface-impl-4.jpg

    展开全文
  • 接口、抽象类和实现类

    千次阅读 2019-04-13 10:49:25
    接口、抽象类和实现类 1. 接口是最抽象的一层,不需要进行任何实现;抽象层可以实现部分接口方法,也可以自定义方法;实现类必须实现所有方法。 2. 接口能被类(抽象类和具体类)实现,区别在于抽象类实现接口,...

    接口、抽象类和实现类

    1. 接口是最抽象的一层,不需要进行任何实现;抽象层可以实现部分接口方法,也可以自定义方法;实现类必须实现所有方法。
    2. 接口能被类(抽象类和具体类)实现,区别在于抽象类实现接口,可以实现该接口的方法,也可以不实现该接口的方法;具体类必须实现接口的所有方法
    3. 接口可以被接口继承,但不允许被类继承
    4. 类之间可以相互继承,而且只能单继承
    5. abstract是抽象的意思,在java中,规定只能修饰类或者方法,所以不能修饰属性。被abstract修饰的内容都是暂未被实现的,比如类、方法。属性之所以不能被abstract修饰,是因为属性不存在"尚未被实现"的状态。比如你可能会联想到int age; 或是String name; 但可惜的是,在申明变量时,int会默认给age赋予初始值0,String会默认给name赋予初始值""。因此属性达不到"尚未被实现的状态",从而不能被abstract修饰。
    6. 抽象类和普通类在于:抽象类不能进行实例化,一方面抽象方法类似于接口的方法;另一方面,非抽象方法又和普通类方法相同,所以它兼备接口和普通类两种特型。
    7. 由于抽象类不能实例化,因此一般是作为父类,由子类进行扩充和实例化,因此,在抽象类的所有protected级别以上的方法或变量,均可以在子类中调用。

    1. 新建2个接口Context和Invocation
      Context
    package com.whc.abs;
    
    /**
     * 接口是最抽象的一层,只定义需要实现的接口函数及功能
     *
     * @author Administrator
     * @date 2019/4/11
     */
    public interface Context {
    
        // 接口中定义的成员变量默认为static
        String name = "admin";
        int age = 18;
        
        Object getName();
        Object getAge();
        void set();
    }
    
    

    另一个接口Invocation

    package com.whc.abs;
    
    /**
     * @author Administrator
     * @date 2019/4/11
     */
    public interface Invocation {
        Object getSrc();
        Object getTar();
        Object getCreateTime();
        Object getCreator();
    }
    
    

    新建一个抽象类AbstractContext

    package com.whc.abs;
    
    import java.util.Date;
    
    /**
     * 抽象类实现接口,可以有抽象方法也可以具体实现
     *
     * @author Administrator
     * @date 2019/4/11
     */
    public abstract class AbstractContext implements Context, Invocation {
    
       /**
         * 覆盖接口类的属性name
         */
        public String name = "admin1";
    
        /**
         * 抽象类可以写新定义的方法
         *
         * @return
         */
        protected String getAccount(){
            return "100";
        }
    
        /**
         * 可以在抽象类实现接口的方法
         *
         * @return
         */
        @Override
        public Object getName(){
            return "admin";
        }
    
        /**
         * 抽象类中可以定义类似接口函数,但必须加上abstract字段
         *
         * @return
         */
        abstract Object getEmail();
    
        /**
         * 抽象类实现接口的方法
         *
         * @return
         */
        @Override
        public Object getCreateTime() {
            return new Date();
        }
    
        /**
         * 抽象类实现接口的方法
         *
         * @return
         */
        @Override
        public Object getCreator() {
            return "administrator";
        }
    }
    
    

    抽象类实现类AbstractContextImpl

    package com.whc.abs;
    
    /**
     * @author Administrator
     * @date 2019/4/11
     */
    public class AbstractContextImpl extends AbstractContext {
    
        /**
         * 可以在实现类中覆盖抽象类已有的方法
         *
         * @return
         */
        @Override
        public Object getName() {
            return "guest";
        }
    
        /**
         * 接口中的方法需要实现
         *
         * @return
         */
        @Override
        public Object getAge() {
            return "25";
        }
    
        /**
         * 接口中的方法需要实现
         */
        @Override
        public void set() {
    
        }
    
        /**
         * 接口中的方法需要实现
         *
         * @return
         */
        @Override
        Object getEmail() {
            return null;
        }
    
        /**
         * 接口中的方法需要实现
         *
         * @return
         */
        @Override
        public Object getSrc() {
            return null;
        }
    
        /**
         * 接口中的方法需要实现
         *
         * @return
         */
        @Override
        public Object getTar() {
            return null;
        }
    
        public static void main(String[] args) {
            AbstractContext context = new AbstractContextImpl();
            System.out.println(context.name);//访问的是AbstractContext的name成员,它覆盖了接口类的静态成员name
            System.out.println(context.age);//访问的是接口定义静态变量age
            System.out.println(context.getAccount());//访问的是抽象类自定义实现的方法
            System.out.println(context.getName());//访问的是本实现类的方法,因为实现类对抽象类的方法进行了覆盖
            System.out.println(context.getAge());//访问的是本实现类的方法,实现了Context接口的方法
        }
    
    }
    
    

    输出结果:

    admin1
    18
    100
    guest
    25
    

    github地址:

    https://github.com/wuhc2006/springboot-practice/tree/master/springboot-thread/src/main/java/com/whc/abs

    展开全文
  • Eclipse如何查看接口实现类快捷键

    万次阅读 多人点赞 2017-03-01 12:32:44
    1、找到要打开的接口类 2、双击接口名选中 3、按Ctrl+T打开接口实现类 以List接口为例,如下所示
  • 如果一个接口有2个不同的实现, 那么怎么来Autowire一个指定的实现? ...2、实现类:ImageLayerImpl ,实现了ILayer接口。 @Service("imageLayerImpl") public class ImageLayerImpl implimen...
  • spring 获取指定接口或父类的所有实现类 并筛选出指定的实现类处理方式 父类(接口)-->子类(实现)-->含有指定注解-->bean注解接口接口实现类核心工具方法核心工具类 处理方式 父类(接口)–>子类(实现)–&...
  • 1、一个实现类实现多个接口 例如:serviceImpl implements Interface1,Interface2 在controller中 @AutowiredInterface1 只能调用Interface1接口的方法 总结,注入单个接口,只能调用对应的接口方法 2、一个...
  • Intellij IDEA 查找接口实现类的快捷键

    万次阅读 多人点赞 2018-03-07 11:31:31
    查找接口的实现类: IDEA 风格 ctrl + alt +B 查看类或接口的继承关系: ctrl + h 1、IDEA_查找接口的实现 的快捷键 http://blog.csdn.net/u010003835/article/details/79036666 2、intellij idea8.1.2中...
  • 话不多说: ...三、建立实现多个实现类:用于实现具体方法(注意:实现类需要注入容器) 四、建立操作类型工厂 五、使用方法示例:这个标注的对象就是根据请求参数的类型来动态选择的。 ...
  • eclipse 查看接口实现类快捷键

    千次阅读 2019-03-16 21:41:54
    在接口类里按 Ctrl + T 会出现接口实现类列表
  • C语言实现类

    万次阅读 多人点赞 2017-03-24 19:05:37
    c语言实现类 学习嵌入式,C语言是必须学习的一门语言,C语言在设计之初是为了提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言不光提供了许多...
  • 查看idea接口实现类快捷键

    万次阅读 2019-02-26 18:23:42
    查找接口的实现类: IDEA 风格 ctrl+h
  • IDEA查找接口实现类及快速实现接口

    万次阅读 多人点赞 2018-08-28 18:30:28
    查找接口的实现类: IDEA 风格 ctrl + alt +B   IDEA快速实现接口快捷方式 ALT +INSERT  
  • IDEA进入接口方法实现类

    万次阅读 2019-07-05 11:53:48
    IDEA进入接口方法实现类 eclipse里 直接 ctrl 然后到方法 直接 会显示 。 但是IDEA不行; 比如要进入service实现类的delete方法 右击 或者 直接快捷方式 ctrl+T ...
  • Java 获取接口所有实现类

    万次阅读 2017-10-10 23:17:22
    利用Spring的Bean工厂,获取接口所有实现类
  • 1、接口:IUserService public interface IUserService { ...2、实现类:UserServiceImpl,实现了UserService接口 @Service("UserServiceImpl ") public class UserServiceImpl implements IUser...
  • Android 利用ViewPager实现类微信的左右滑动效果

    千次下载 热门讨论 2014-09-19 17:41:34
    Android利用ViewPager实现类微信的左右滑动效果,详细代码注解解析setOnPageChangeListener各参数意义以及使用方法
  • Java的Lock实现类介绍

    千次阅读 2019-06-11 15:22:10
    Java的Lock实现类介绍 Java的Lock实现类介绍 所的实现类:AQS(AbstractQueuedSynchronizer)、ReentrantLock、ReentrantReadWriteLock,CountDownLatch,Semphore。 其他多线程协作的场景: CyclicBarrier。 AQS...
  • 所以用到了一个接口多个实现类,每个实现类查询不同数据库。记录一下接口是怎么调用不同的实现类的。 定时任务一: 定时任务二: 同时继承了一个实现类AbstractSendDataTask   applicationContext.xml...
  • 最近有个一需求需要根据外界环境的属性(操作系统 || yml属性 || 其他bean的状态) 来实现启动时注入两套不同的实现类, 实现切换. 实现启动时条件注入分2步: 第一步 使用@Conditional(参数为 True false条件实现类 ...
  • idea打开接口实现类的快捷键

    万次阅读 2019-11-08 14:40:27
    1、在WebApplicationInitializer接口页面,按【Ctrl+h】,弹出右侧实现类的窗口,可以看到WebApplicationInitializer接口有4个实现类,如下图: 2、双击某一个实现类即可跳转到该实现类的页面,如下图: ...
  • java找到指定接口的实现类

    千次阅读 2020-02-10 13:30:20
    一、背景 想在自己开发的项目上加一个算法工具类用来...因此开始在学习如何实现,在学习过程中发现需要写一个方法用来找到指定接口的实现类,因此开启了这趟学习之旅。 二、寻求答案的路途 刚开始看到根据指定接...
  • 关键在于: applicationContext.getBeansOfType(ChartService.class);... 获得Map对象的key为实现类的名称如:chartSimpleServiceImpl 获得Map对象的value为实现类对象如:com.read.data.cms.service.impl.Char...
  • 查找接口的实现类: IDEA 风格 ctrl + alt +B IDEA快速实现接口快捷方式 ALT +INSERT 例如:查看Subject接口的实现类; 一.常用快捷键(这些我们经常用) Alt + Enter 引入类 Ctrl + O 查看我们继承的类...
  • IDEA 查看接口实现类方法

    千次阅读 2020-03-22 19:20:30
    shift+alt+B 可进入实现类方法
  • idea实现类快捷生成接口方法

    万次阅读 2019-04-08 20:46:55
    实现类 当我们实现了接口后,并没有像eclipse那样,鼠标放上去就会提示生成接口方法 鼠标定位到UserService类后面,快捷键:Alt+Enter; 选择Implement methods. 选中点OK就自动生成了. 还有一种方法,将鼠标放在...
  • IDEA如何快速创建接口的实现类

    千次阅读 2019-11-11 17:13:29
    IDEA快速创建接口的实现类只要分成两步 第一步:先创建一个接口 第二步:用鼠标点击接口的名字上,同时按住Alt+Enter键 如图所示,出现下面的窗口 选择 implement interface,会出现下面的窗口 需要改名字的就改...
  • IDEA查看接口的实现类

    千次阅读 2019-09-25 14:07:16
    查找接口的实现类: 快捷键 ctrl + alt +B 再按F2查看详细文档注解 查看类或接口的继承关系: ctrl + h 转载于:https://www.cnblogs.com/zeussbook/p/11279876.html...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,105,998
精华内容 2,442,399
关键字:

实现类